vue中改变了vuex数据视图不更新,也监听不到的原因及解决

 更新时间:2023年03月28日 09:22:48   作者:会点php的前端小渣渣  
这篇文章主要介绍了vue中改变了vuex数据视图不更新,也监听不到的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue改变了vuex数据视图不更新,也监听不到

首先我这里就不说什么强制刷新api了,那东西没用。

我也不说什么计算属性里面要依赖data里面的变量变化了才计算

因为上面2个我都试过了

解决办法是

使用 Object.assign({}, pageInfo.detail, obj)赋值即可正常解决

在vuex里面

    updateContent({
        commit,
        state
    }, {
        key,
        value
    }) {
        let pageInfo = state.pageInfo;
       
            //pageInfo.detail[key] = value  一开始我这里直接赋值的不行
            let obj = {}
            obj[key] = value
            pageInfo.detail = Object.assign({}, pageInfo.detail, obj)
    }

pageInfo.detail[key] = value  这种写法里面其实vue2里面是不会被监听到变化的 

1. 不能监听的情况

(1) 直接通过下标赋值  arr[i] = value

(2) 直接修改数组长度 arr.length = newLen 

替代方法

Vue.set(arr, index, newvalue)
arr.splice(newLen)

vue响应式数据已获取视图不更新问题

首先 => 我们要深刻理解 Vue响应式的原理 通过get 和 set进行获取与设置 同时通知观察者进行新旧虚拟dom树 diff算法就地更新 重新渲染组件

特别注意 => Vue官方文档的注意事项

由于javaScript的限制 Vue不能检测数组和对象的变化 因此你就要思考 为什么我的响应式有问题

我们看一个实战bug 同事托我解决的一个问题

watch 侦听tree回调函数 过滤出来的数组 从而去触发filterNode

但是watch正常 但是偏偏不触发filterNode 一切正常 数据全有 变化也有 refdom节点也能打印出来 就是不触发~ 唯一的可能性 树是空的 所以导致不触发回调过滤

但是有时候刷新页面能触发 有时候不能触发  我怀疑是 Vue的热更新和浏览器的缓存导致

因此我们可以想象为什么 树是空的 我明明有数据 为什么dom上的节点为空

只有一种可能 数据更新 视图没有获取到 那就证明Vue响应式出错了

所以我发现我同事在数据处理上有问题 他利用下标去处理数组进行循环赋值 因此让Vue没有劫持到

所以我换了种写法 用的push 因为push可以做到Vue对数据更新的检测

对于这种问题 Vue官网提供的 Set方法也可以解决 不过这属于亡羊补牢 根本问题并没有解决。

对于解决bug => 困难不在于如何去解决 而是难在去寻找问题 排查问题所在 排查问题的能力是一位开发者至关重要的手段。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何解决vuex在页面刷新后数据被清除的问题

    如何解决vuex在页面刷新后数据被清除的问题

    这篇文章主要介绍了如何解决vuex在页面刷新后数据被清除的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue3实现动态高度的虚拟滚动列表的示例代码

    Vue3实现动态高度的虚拟滚动列表的示例代码

    虚拟滚动列表是一种优化长列表渲染性能的技术,通过只渲染可视区域内的列表项,减少DOM的渲染数量,本文就来介绍一下Vue3实现动态高度的虚拟滚动列表的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • vue以组件或者插件的形式实现throttle或者debounce

    vue以组件或者插件的形式实现throttle或者debounce

    这篇文章主要介绍了vue以组件或者插件的形式实现throttle或者debounce,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Vue在 Nuxt.js 中重定向 404 页面的方法

    Vue在 Nuxt.js 中重定向 404 页面的方法

    这篇文章主要介绍了Vue在 Nuxt.js 中重定向 404 页面的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • 使用vue写一个翻页的时间插件实例代码

    使用vue写一个翻页的时间插件实例代码

    最近在做自己项目中遇到一个非常简单的功能,跟大家分享下,这篇文章主要给大家介绍了关于使用vue写一个翻页的时间插件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Vue computed计算属性总结记录

    Vue computed计算属性总结记录

    在vue中,有时候你需要对data中的数据进行处理,或者对抓取的数据进行处理之后再挂载呈现到标签中,这时候你就需要计算属性了,当然看到这里你可能还是不了解那下面我举几个实例并附代码解释
    2023-02-02
  • vue.js简单配置axios的方法详解

    vue.js简单配置axios的方法详解

    axios是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,下面这篇文章主要给大家介绍了关于vue.js简单配置axios的相关资料,需要的朋友们可以参考借鉴,需要的朋友们下面来一起学习学习吧。
    2017-12-12
  • Vue3封装登录功能的两种实现

    Vue3封装登录功能的两种实现

    本文主要介绍了Vue3封装登录功能的两种实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue获取参数的几种方式总结

    vue获取参数的几种方式总结

    这篇文章主要介绍了vue获取参数的几种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue实现购物车功能(亲测可用)

    vue实现购物车功能(亲测可用)

    这篇文章主要为大家详细介绍了vue实现购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04

最新评论