关于自学vue3响应式源码-proxy中的一个问题(Reflect.set)
最近在看vue3响应式源码,自己手写时发现了一个情况是
export const reactive = (target) => { return new Proxy(target, { get(target, prop, recevier) { //依赖收集 track(target, prop); return Reflect.get(...arguments); }, set(target, prop, value, recevier) { let res = Reflect.set(...arguments); //触发依赖更新 trigger(target, prop); //这里如果直接return Reflect.set(...arguments),则会有更新问题 //比如在setTimeout中同时更新一个对象的两个属性,则计时器结束之后只会更新第一个属性,第二个不触发更新 //先赋值res,再返回,则正常 return res; }, })}
let animal = reactive( { name: 'dog', age: 2 } ) effect(() => { document.querySelector('#app').innerHTML = ` <div> <h2>name: ${animal.name}</h2> <h2>age: ${animal.age}</h2> </div> ` }) setTimeout(()=>{ animal.name = 'cat'//更新 animal.age = 3//直接return Reflect.set不会更新 },2000)
改为let res = Reflect.set(...arguments);再返回则正常
animal.name = 'cat' 首次 trigger 时,animal 对象还未更新,拿到的是 {name: 'dog', age: 2}, 执行完 effect 后,使用 Reflect.set(...arguments) 进行设置,变为了 {name: 'cat', age: 2};
animal.age = 3 再次 trigger 时,拿到的 animal 值为 {name: 'cat', age: 2},表现为“第二个不触发更新”,最后使用不触发更新的 Reflect.set(...arguments) 进行设置,变为了 {name: 'cat', age: 3},页面无变化
本文向大家介绍解决nodejs中使用http请求返回值为html时乱码的问题,包括了解决nodejs中使用http请求返回值为html时乱码的问题的使用技巧和注意事项,需要的朋友参考一下 今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法。果不其然报错了:SyntaxError: Unexpected token in JSON at po
vue3 响应式无法更新 下面是最小复现代码 https://play.vuejs.org/#eNqVVs2O2zYQfhVWF2kBV27QnlzbaJIu2vTQD... 点击“修改值”这个按钮,最上层组件能够更新值, 但是最内层的组件无法监听到值被改变了
问题内容: 我有以下jQuery函数。我正在尝试返回此处显示的GUID值。警报工作正常,并且已填充该值,但是我似乎无法将其分配给变量并返回其值。 最终,我需要在其他函数等中访问GUID值。我尝试过的所有内容仅显示为。 我想做这样的事情: 问题答案: 这只是异步调用的性质,您不能将其结果用作值。这就是为什么他们让您传入一个获取调用结果的函数,他们也不可能!还要注意,函数调用立即返回,因此您就是。 大
在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框 数据定义 数据初始化,其中list是一个数组,具有唯一的id属性 组件A中定义了计算属性rowSelection 当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection 在父组件中进行事件定义并更新内容 rowS
最近在使用vue3组合式API,参照博主@MrBigShot 的建议自己写了几个hooks,有一个函数返回的响应式对象无法解包,不知道什么原因 console.log(tableData) 控制台中明明有数据的