vue中watch、set、computed的比较

抛出问题:当 $store.state.topicList变更时,哪种方式实现view更新

1、data(){
return {
topicList: this.$store.state.topicList
}
},
topicList 不会因 Vuex 中管理的 state.topicList 的修改而变化

2、 computed:{

    topicList(){
        return this.$store.state.topicList
    } 
}

}
这种方式 topicList 会变化

data 中的内容只会在 created 钩子触发前初始化一次,类似于你直接写 const data = { foo: 123 } 这样,这时属性的值是纯粹的字面量,JS 字面量赋值后显然不会自动更新

先看个简单例子:

let b = ‘xxx’
let a = b
b = ‘xyz’ // 这时对于原始类型,a 肯定还是 ‘xxx’
换句话说,data 中内容依赖变更时,data 属性不会变更(它的设计目标就是保存组件的局部状态数据而已)。而 computed 则是通过【依赖追踪】实现的,在 computed 求值时引用的 Vue 变量变化时,会触发对 computed 的重新计算。

vue的双向绑定机制:简单来说,就是劫持一个属性的赋值方法setter,并触发相应的视图更新。

watch实现view更新机制:观察 Vue 实例变化(data) 中内容变更时,更新view

set、computed实现view更新机制:不仅观察 Vue 实例变化(data) 中内容变更,而且追踪data属性依赖的内容进行观察,内容有变更时更新view

上面的问题就像这个例子一样,变量 b 值的变化并不会使 变量a的属性变化,所以使用watch不会是view更新,但是computed追踪到 b 值的变化时,也使view更新

讲得不够清晰,可参考文献https://segmentfault.com/q/1010000009696383

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值