您现在的位置是:网站首页> 编程资料编程资料
Vue3 reactive响应式赋值页面不渲染的解决_vue.js_
2023-05-24
335人已围观
简介 Vue3 reactive响应式赋值页面不渲染的解决_vue.js_
Vue3 reactive响应式赋值页面不渲染
问题描述
//声明变量 let data = reactive([]) http().then(res=>{ data = res.data console.log(data) }) //data数据更新,页面没有渲染1.因数据结构而导致的未渲染解决方法
依旧是reactive,可以在外面包一层
//声明 let state = reactive({ data:[] }) //赋值 state.data= res.data改为ref赋值
//声明 let data = ref([]) //赋值 data.value = res.data
2.因页面节点未加载导致页面未渲染解决方法
import {nextTick} from 'vue' const func = async ()=>{ await nextTick() state.data= res.data }3.因未指到具体点未渲染解决方法
const state = reactive({ data:[{ name:'tom', age:3 },...] }) const func = async ()=>{ //state.data.forEach(item=>{ // item.age = 4//未生效 //}) state.data.forEach((item,index)=>{ state.data[index].age = 4 }) }Vue3 响应式原理-reactive
Reactivity模块基本使用
reactive方法会将对象变成proxy对象, effect中使用reactive对象时会进行依赖收集,稍后属性变化时会重新执行effect函数。
编写reactive函数
const reactiveMap = new WeakMap(); // 缓存列表 const mutableHandlers: ProxyHandler
这里必须要使用Reflect进行操作,保证this指向永远指向代理对象
let school = { name:'zf', get num(){ return this.name; } } let p = new Proxy(school,{ get(target, key,receiver){ console.log(key); // return Reflect.get(target,key,receiver) return target[key] } }) p.num将对象使用proxy进行代理,如果对象已经被代理过,再次重复代理则返回上次代理结果。 那么,如果将一个代理对象传入呢?
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- 前端开发使用Ant Design项目评价_React_
- 基于vue3+antDesign2+echarts 实现雷达图效果_vue.js_
- Vue项目中props传值时子组件检测不到的问题及解决_vue.js_
- vue中使用el-dropdown方式_vue.js_
- Vue数据劫持详情介绍_vue.js_
- webpack4升级到webpack5的实战经验总结_javascript技巧_
- elementUI中el-dropdown的command实现传递多个参数_vue.js_
- js中yield参数应用示例深入理解_JavaScript_
- 手把手带你安装vue-cli并创建第一个vue-cli应用程序_vue.js_
- 实现一个Vue版Upload组件_vue.js_
