Vue data中的某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?
不会立即同步执行重新渲染,vue实现响应式并不是数据发生变化之后DOM立即变化,而是按一定的策略进行DOM的更新。vue在更新DOM时是异步执行的,只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的数据变更。
批量异步更新策略:
Vue在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。就是说只要观察到数据变化,就会自动开启一个队列,并缓冲在同一个事件循环中发生的所有数据改变。在缓冲时会去除重复数据,从而避免不必要的计算和DOM操作
Vue组件data为什么必须是函数?
因为组件是可以复用的,JS里对象是引用关系,如果组件data是一个对象,那么子组件中的data属性值会相互污染。所有一个组件的data选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。