您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 遂宁分类信息网,免费分类信息发布

在Vuex中无法观察到值变化的解决方法是什么?

2024/3/16 23:26:57发布29次查看
下面我就为大家分享一篇基于vuex无法观察到值变化的解决方法,具有很好的参考价值,希望对大家有所帮助。
在跨越主路由视图时,由于vuex的状态值一直存储在内存中,所以在组件视图重新载入时,可能会出现组件无法检测到状态值的变化,从而导致业务逻辑出现错误。
假定通用头部组件有一个全局任务状态值,其他的组件都要根据此任务值进行更新,更可能出现的情况是,任务状态值是异步加载完成的,于是需要如此编写业务逻辑:
computed : { task () { return this.$store.state.task } }, watch : { task : { deep: true, handler (val) { // 由于是异步载入,所以只能在状态值的变化时执行渲染操作 // 绝不可在mounted中执行render方法 this.render(val) } } }
但是,由于上面的原因,第一次载入视图时,因为vuex的状态值还没有存储在内存中,所以渲染正常。发生了视图切换后,虽然也重新载入了任务状态值,但由于task并没有发生变化,所以render方法不会被调用,于是组件无法完成渲染过程。
解决的办法很简单,强行触发task值发生改变,方法是定义一个时间戳,如果觉得在时间戳的粒度仍然太粗,还可以组合使用随机数,如下:
watch: { taskid : { handler (val) { // 从v-model获取到的新值 let taskid = this.taskid // 提交新值变化 this.$store.commit(task_id, { id : taskid, // 添加时间戳 time : date.now().valueof(), // 添加随机数 random : math.random() }) } } }
经过上面的处理,只要发生taskid的赋值现象,那么一定会触发vuex的状态变化,所以每次组件载入时或taskid的值发生变化时,render方法就一定会被执行。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
js中document.write和document.writeln的区别
javascript中prototype与__proto__的关系详解
node.js循环删除非空文件夹及子目录下的所有文件
以上就是在vuex中无法观察到值变化的解决方法是什么?的详细内容。
遂宁分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录