获得徽章 0
赞了这篇沸点
如何解决 Vue3 的 watch 新老值相同的问题

```javascript
const proxy = reactive({ name: 'coboy' })
watch(() => cloneDeep(proxy), (newVal, oldVal) => {

})
```
在克隆的时候,就等于深度遍历了 proxy 的每一个 key,然后每一个 key 就和当前 watch 的 reactive effect 实例对象进行了绑定。这个时候和 reactive effect 实例对象绑定的是原响应式对象,所以原响应式对象发生更改的时候,依然会触发当前 watch 的 reactive effect 实例对象的 scheduler 方法执行。
watch 里面新老值返回的都是克隆之后的响应式对象
展开
评论
赞了这篇沸点
在watchEffct里面修改值会造成死循环吗?
不会,因为在触发依赖的时候,会判断需要执行的副作用函数如果和当前正在执行的副作用函数相同,则不执行。
评论
赞了这篇沸点
async await Promise的使用经验总结

// async await + Promise 的一些特别用法
function promise() {
return Promise.resolve('init:')
}

async function test() {
const r = await promise().then((r) => {
console.log('xxx')
return r + 'ggg'
})
console.log('bbb', r)
}

test()

// await 后面也可以是一个普通函数
function promise1() {
return 'promise1'
}

async function test1() {
const r = await promise1()
console.log('bbb', r)
}

test1()

// then后面最好最好要加catch,不然then里报错了,你不知道
展开
评论
赞了这篇沸点
async、await和promise的区别之一就是它的状态触发不能控制,promise的resole和reject可以保存起来,在将来某个时刻再进行执行触发。
1
赞了这篇沸点
数据量的情况下最好不要用splice去删除数组,splice的性能消耗也比较大,而是用一个指针,指向数组的位置,下次循环,从该指针开始
2
赞了这篇沸点
Vue知识小结:
VNode是跟DOM有关的,你可以理解为UI页面在JS里的表现形式,instance是组件实例对象,它上面的所有方法和属性,都是用来服务处理生成该组件的VNode的,然后去渲染成最终的视图页面。
评论