在Vuex更新,組件內的視圖更新問題


由於js的限制,vue無法進行監聽數組;

  • 當你利用索引直接設置一個項時,例如: vm.items[indexOfItem] = newValue
  • 當你修改數組的長度時,例如: vm.items.length = newLength
  • 直接給對象賦值新屬性

解決方式:
Vue.set( target, key, value )

測試代碼:

Store的代碼:

import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { TestArr: [1,2,5], TestObj:{ name:'YK' } }, getters: { TestArr_getters: state => { return state.TestArr } }, mutations: { changeTestArr(state, obj) { //state.TestArr[2]=3 //上面是錯誤演示,會改變值,但視圖不會更新,在組件內同理 Vue.set(state.TestArr,2,3) //正確演示 // state.TestObj.age=11 //上面是錯誤演示,會改變值,但視圖不會更新,在組件內同理 Vue.set(state.TestObj,'age',11)//正確演示 } }, actions: { changeTestArr_action(context){ setTimeout(function () { context.commit('changeTestArr') }, 1000) } } }); 

組件內的代碼:

<template> <div> <p>state的值:{{$store.state.TestArr}}</p> <p>getterste的值:{{TestArr_getters}}</p> <p>TestObj的值:{{TestObj}}</p> <button @click="fun1">改變</button> </div> </template> <script> import {mapGetters,mapState} from 'vuex' export default { name: '', computed:{ ...mapState(['TestObj']), ...mapGetters(['TestArr_getters']), }, methods:{ fun1(){ this.$store.dispatch('changeTestArr_action') } } }; </script>
本篇文章轉自https://www.jianshu.com/p/720c436edc1f


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM