vue视图不更新的原理是什么,vue对象改变视图不更新

  vue视图不更新的原理是什么,vue对象改变视图不更新

  当我们在vuex中操作数据时,会遇到视图不更新的情况。下面这篇文章主要介绍关于vuex更新视图的一些思考。通过示例代码详细介绍,有需要的朋友可以参考一下。

  

目录

  场景解决方案总结扩展vuex可以集中存储和管理一个应用的所有组件的状态。当Vue组件从存储中读取状态时,如果存储中的状态发生变化,相应的组件将相应地高效更新。

  但是,最近,我踩到了vuex的坑:

  

场景

  当您第一次进入加载数据页面时,数据将不会显示。点击按钮或切换页面后,将显示数据。通过分析发现,第一次加载页面时,得到的数据是{}(空对象)。当获得数据时,执行commit(),并且状态中的数据已经被commit()改变。更新的数据也可以通过在页面中计算获得。但是视图不会更新,采集的数据也不会显示。

  

解决

  尝试在页面中发送commit()以再次更新视图是无效的。

  Will Vue.set(state, myData ,Data),无效。

  .

  最终方案:

  代码中声明的对象中的键是动态的,所以一开始只声明了{}。

  原来数据是数组的时候,不能直接通过索引赋值,数组的长度也不能修改。Vuex将只跟踪对象创建时存在的属性,添加到对象的新属性不会触发更新。

  并且循环嵌套层级太深,视图也可能不更新

  最后给array对象赋一个值,写在这里转换,生效。如下所示:

  const store=new Vuex。商店({

  状态:{

  我的数据:[]

  },

  突变:{

  setData(状态,数据){

  //state.myData=data不更新视图。

  Vue.set(state, myData ,JSON.parse(JSON.stringify(data)))

  }

  },

  动作:{

  myFn () {

  store.commit(setData )

  }

  }

  })

  导出默认存储

  如果添加了新的对象属性,也可以使用Object.assign(),但它必须是深拷贝(否则,添加到对象的新属性将不会触发更新)

  Let some object=object.assign ({},some object,{ new field:value })//深度复制

  //object . assign(this . someobject,{key: 1})//light copy

  

总结

  您不能直接更改商店中的状态。改变store中状态的需求提交 (commit)突变可以通过在组件中调用store中的状态并在calculated属性中返回来获得,也可以直接$store.state来获得calculated: {

  myData () {

  返回store.state.myData

  }

  },

  已安装(){

  console . log(this . store . state . my data)

  }

  向数组添加新属性不会触发视图更新,因为vue不会添加监听新属性的get和set。

  分配的数据,如果循环嵌套层次太深,视图可能无法更新。

  

扩展

  这些方法在阵列上运行,vue可以检测数据变化:

  推送()

  流行()

  shift()

  未移位()

  拼接()

  排序()

  反向()

  而下面不会改变原数组(返回一个新数组),这是vue检测不到的:

  过滤器()

  concat()

  切片()

  关于vuex更新视图引发的一些思考这篇文章到此为止。有关vuex更新视图的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: