基于Vuex无法观察到值变化的解决方法

 更新时间:2018年03月01日 10:15:46   作者:蚁方阵  
下面小编就为大家分享一篇基于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方法就一定会被执行。

结论

为了满足Vuex的值传递要求,尤其是需要强行刷新Vuex的缓存时,添加时间戳与随机数不失为一种好的解决方案。

以上这篇基于Vuex无法观察到值变化的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • element ui table(表格)实现点击一行展开功能

    element ui table(表格)实现点击一行展开功能

    这篇文章主要给大家介绍了关于element ui table(表格)实现点击一行展开功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Vue3对比Vue2的优点总结

    Vue3对比Vue2的优点总结

    vue3解决了vue2的一些缺陷与弊端,学习新的技术是很有必要的,本文总结了一些vue3的优点,希望各位能尽快转入vue3的使用中
    2021-06-06
  • TDesign在vitest的实践示例详解

    TDesign在vitest的实践示例详解

    这篇文章主要为大家介绍了TDesign在vitest的实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • vue项目不能使用localhost访问的解决

    vue项目不能使用localhost访问的解决

    这篇文章主要介绍了vue项目不能使用localhost访问的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 如何在vue中使用ant-design-vue组件

    如何在vue中使用ant-design-vue组件

    这篇文章主要介绍了如何在vue中使用ant-design-vue组件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Vue中sync修饰符分析原理及用法示例

    Vue中sync修饰符分析原理及用法示例

    在vue中,子组件如果想修改父组件的变量,一般做法是通过绑定事件的方法,父组件向子组件传递修改变量的方法,子组件触发修改变量的方法执行,这种方式中规中矩;另一种方法是使用sync修饰符,此方法可以减少很多代码量
    2022-08-08
  • 解决vue打包之后静态资源图片失效的问题

    解决vue打包之后静态资源图片失效的问题

    下面小编就为大家分享一篇解决vue打包之后静态资源图片失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • vue使用v-for实现hover点击效果

    vue使用v-for实现hover点击效果

    hover是css中的选择器,用于选择鼠标指针浮动在上面的元素。这篇文章主要介绍了vue使用v-for实现hover点击效果,需要的朋友可以参考下
    2018-09-09
  • Vue向后端传数据后端接收为null问题及解决

    Vue向后端传数据后端接收为null问题及解决

    这篇文章主要介绍了Vue向后端传数据后端接收为null问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • el-table多选toggleRowSelection不生效解决方案

    el-table多选toggleRowSelection不生效解决方案

    这篇文章主要给大家介绍了关于el-table多选toggleRowSelection不生效的解决方案,文中通过图文以及代码将解决办法介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论