vuex 官網建議通過commit mutation 來改變store里的數據,但在實際項目中不方便,因為需要改變的狀態太多,要寫好多個方法來commit很麻煩 ,所以我就通過js給store里面的state數據增加了path路徑然后把path綁定到需要改變狀態的標簽上,在需要改變狀態時候獲取path,并通過eval("this.$store.getters.PhysicsData" + path + ".ifCollection=" + true );來改變store里面的數據狀態,現在效果達到了,但心里老趕腳方方的,,,想問下各位大神,這樣修改store會有什么弊端嗎?
2 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
Mutation
更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation。Vuex 中的 mutation 非常類似于事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。
嚴格模式
在嚴格模式下,無論何時發生了狀態變更且不是由 mutation 函數引起的,將會拋出錯誤。這能保證所有的狀態變更都能被調試工具跟蹤到。
首先你這種做法肯定是錯誤的,你這樣做只會更復雜。
你說需要改變的狀態太多,需要寫多個 mutation
來 commit
很麻煩,你可能對 mutation
有什么誤解
你完全可以這樣做來達到同樣的效果:
const store = new Vuex.Store({ state: { allSmallChapter: [], }, mutations: { saveCollection(state, payload) { const { index, ifCollection } = payload; state.allSmallChapter = state.allSmallChapter.map((item, itemIndex) => { if (itemIndex === index) { item.ifCollection = ifCollection; } return item; }); }, }, });
this.$store.commit('saveCollection', { index: 0, ifCollection: true, });

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
Veux的mutations是很重要的一點,就是把處理數據邏輯方法全部放在mutations里面,使得數據和視圖分離;
如果按照你那樣做卻是可以實現目的,但是在健壯性、可讀性、維護性上來說不建議這樣做的。如果你的同事或者下一位填坑的人不懂你的想法,是不是得一臉懵逼的到處罵人
添加回答
舉報
0/150
提交
取消