vue中的小坑

2017-09-17  本文已影响0人  饥人谷_啦啦啦
  1. 数据绑定的问题。
    看官方文档的时候,发现一个疑问,当我们异步操作改变一个根级别的data 的时候,我们经常异步操作,然后拿到结果,直接赋值给这个对象,那么问题来了,这时候,这个对象是不是响应式的呢,,
    答案是肯定的。
test

操作的结果见下图

测试结果

为什么是这样,,而且和官方 推荐的操作方式不一样,第一个setTimeout也能成功呢。

this.project = Object.assign({},this.project,obj)

的方法明明不一样,为什么第一个setTimeout可以变成响应式的呢?

个人理解:

解决办法:

方法三

这三种方法,都行。

另外还有一个比较容易 迷茫的地方:

test1 test1 result

为什么这里会渲染呢,这个时候,难道 lala.text,是响应式的么。答案是不是的,如果我们代码写成这样,

test2

结果不能正常渲染 la.text 。。
为什么会是这样的,我们要注意到, VUE中DOM操作是一个异步的操作,会有一个延迟在的。
大致流程是这样的。

由此,我们来看一下第二种, 因为,this.la['text'] = 'text' 不能触发 setter ,他不是响应式的,所以,即使我们仍然能console.log ,但是,不是响应式的,根本不能触发 setter, 就谈不上更新了。

2 .对 生命周期的再次回顾 (比较重要的地方)

生命周期

这个应该是一个比较完整的生命周期的图示。
之前有点理解偏差.

reson
  1. 看vue 源码分析 之类的文章,得到的一些收获
源码

之所以,vue能做到响应式,基本上是因为 initState做的事情。。

init做的事 Obseve做的事 defineReactive 依赖收集 总结依赖收集 总结

文章参考:
vue源码分析
关于VUE实例的生命周期

上一篇 下一篇

猜你喜欢

热点阅读