[英]Vuex Mutations and Airbnb eslint
我在我的 Vuejs 項目中取消了Airbnb Eslint (使用 Vue-cli)。 規則之一是no-param-reassign 。 為了控制狀態(使用 Vuex),必須使用突變/動作:
規則沖突
mutations: {
increase: (state) => {
state.counter++;
}
}
按規則修改后
mutations: {
increase: (state) => {
const thisState = state;
thisState.coutner++;
}
}
有沒有更好的方法來編寫上面的語句而不違反 eslint 規則?
將'state'
添加到規則的ignorePropertyModificationsFor
中。
不,對不起。
由於 Vuex 存儲的狀態是由 Vue 做出的反應,所以當我們改變狀態時,觀察狀態的 Vue 組件會自動更新。 這也意味着 Vuex 突變在使用普通 Vue [...]
來源: https ://vuex.vuejs.org/en/mutations.html
這確實意味着您必須更改參數才能將任何更改變為您的實際狀態。 唯一的解決方案是關閉該規則。
附錄:
我可能有更好的解決方案。 請注意,這是他們的 ESLint強制執行的實際規則:
'no-param-reassign': ['error', {
props: true,
ignorePropertyModificationsFor: [
'acc', // for reduce accumulators
'e', // for e.returnvalue
'ctx', // for Koa routing
'req', // for Express requests
'request', // for Express requests
'res', // for Express responses
'response', // for Express responses
'$scope', // for Angular 1 scopes
]
}],
您可以將'state'
添加到ignorePropertyModificationsFor
數組中,這樣在修改狀態屬性時就不會遇到錯誤。
替代方案:您可以使用Vue.set 。
Vue.set 使用相同的 reactiveSetter 函數( 參考)。
例如:
import Vue from 'vue';
const state = () => ({ counter: 0 });
const mutations = {
increase(states) {
Vue.set(states, 'counter', states.counter + 1);
},
};
筆記:
如果您不想更改 Airbnb 配置的規則,您可以執行以下操作:`
mutations: {
increase: (state) => {
const thisState = {...state};
thisState.counter++;
Object.assign(state, thisState);
}
}`
在上面,您復制現有狀態,修改該復制狀態的計數器,然后用新更新的狀態替換現有狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.