博文(玖五)

Results 133 comments of 博文(玖五)

@ZhengXiaowei 这两个地方都得下功夫。但如果列一个先后循序的话,可以先把基础知识打牢。先往代码简洁性上下功夫会吃点亏。 > 因为看你代码的人并没有你想的那么多,通常只有自己看自己代码。 > 举个例子: > 你代码写的很漂亮,但是基础差一点,那么这时候无论是别人问你问题,或者你和别人讨论问题,都会受影响,让人觉得你很菜,但其实你代码写的很漂亮别人并不知道。关于这点,说多了都是泪水。。。。

**思考题** > 其实文章中为了方便理解,写的都是伪代码,所以很多安全检查和一些细节的处理逻辑就都让我删了 文章的代码中会有这样一个问题,当数据改变触发 `Notify` 时,`watcher` 会再次进行 `this.get()` 操作,那就会将自己又一次添加到 Dep 中,那 Dep 中的依赖就会发生重复,发生了重复后数据又发生改变时,`watcher` 会被通知两次,这个问题怎么解决?? 有兴趣的小伙伴自己想方案或者看vue源码 欢迎把解决办法写在下方留言~

@ssshooter 哈哈哈哈哈,这个问题相当有技术含量,不错不错,,,,,😄😄😄 **defineReactive 这个函数只有 Object 类型的数据才能进的去,Array是进不去的,所以 Observer 上的 Dep 是给Array类型的数据用的。** 而且在 defineReactive 函数中有这样几行代码 ```javascript let childOb = !shallow && observe(val) if (childOb) { childOb.dep.depend() if (Array.isArray(value)) { dependArray(value) } }...

@ssshooter 哈哈,这是个好问题,可能很多小伙伴都会有这样的问题, `key` 上的 `dep` 和 `val` 上的 `dep` 有什么不同? 用数组举例子,如果是这样的数据 `{list: [1,2,3]}`,对 `list` 进行了操作比如 `this.list.push(4)`,vue对 `Array` 类型的拦截操作是从 `this` 上取 `__ob__`,然后使用 `__ob__`上的 `dep`(就是 `val`的 dep) 触发消息。 也就是说数组的拦截器是访问不到 `key` 上的 `dep`的,但可以访问到...

@JSupot 原因有很多,`watcher` 中有一个方法 `teardown` 用来将 `watcher` 从曾经观察过的所有 `dep` 中清除,那如果 `watcher` 想把自己从这些 `dep` 中删除掉,首先自己得知道自己都 `push` 到了哪些 `dep` 中,对吧? teardown 中有一部分代码是这样写的: ```javascript // this 就是 watcher 实例 // deps 就是你说的watcher收集到的 dep 列表...

@ClassName 喔?什么顺序?

@ClassName 每个属性有自己的 Observer 实例~ walk方法就是在 Observer 中执行的~~

@JSupot 额。。你可以去看看文档。。。。里面会有答案。。

@ClassName 不客气~ 😁😁

@JSupot 对,表现形式上是这样的~