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

下面我就为大家分享一篇基于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中无法观察到值变化的解决方法是什么?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750863.html

(0)
上一篇 2025年3月8日 05:44:05
下一篇 2025年3月7日 11:56:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论