首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuex突变与Airbnb eslint

Vuex突变与Airbnb eslint
EN

Stack Overflow用户
提问于 2017-06-20 15:25:08
回答 3查看 4.3K关注 0票数 8

我正在撤销我的Vuejs项目中的Airbnb Eslint (使用Vue-cli)。其中一个规则是不重新分配。为了控制状态(使用Vuex),必须使用突变/操作:

规则冲突

代码语言:javascript
复制
mutations: {
    increase: (state) => {
        state.counter++;
    }
}

按规则更改后的

代码语言:javascript
复制
mutations: {
    increase: (state) => {
        const thisState = state;
        thisState.coutner++;
    }
}

是否有更好的方法来写上面的陈述,而不是打破条条框框?

解决方案(多亏了https://stackoverflow.com/users/3548338/cobaltwayhttps://stackoverflow.com/a/44658727/6665785)

'state'添加到规则的ignorePropertyModificationsFor中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-20 16:42:02

不,对不起。

由于Vuex存储的状态是由Vue响应的,所以当我们改变状态时,观察状态的Vue组件将自动更新。这也意味着Vuex突变在与普通Vue一起工作时会受到同样的反应性警告。

来源:https://vuex.vuejs.org/en/mutations.html

这确实意味着必须对参数进行变异才能使任何更改变为实际状态。唯一的解决办法是关闭这条规则。

增编:

我可能有更好的解决办法。请注意,这是他们的ESLint强制执行的实际规则

代码语言:javascript
复制
'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数组中,以便在修改状态属性时不会遇到错误。

票数 27
EN

Stack Overflow用户

发布于 2020-09-04 17:13:18

备选方案:您可以使用Vue.set

Vue.set使用相同的reactiveSetter函数(参考文献)。

例如:

代码语言:javascript
复制
import Vue from 'vue';

const state = () => ({ counter: 0 });

const mutations = {
  increase(states) {
    Vue.set(states, 'counter', states.counter + 1);
  },
};

注意:

  • 我使用变量名称状态,而不是在函数增加时使用状态,因为变量状态可能在上一个作用域中定义(如上面的示例)。如果不将第一个突变的参数重命名为“state”(或其他名称),它就违反了无影规则。
票数 1
EN

Stack Overflow用户

发布于 2020-09-07 17:22:20

如果不希望更改Airbnb配置的规则,可以执行以下操作:

代码语言:javascript
复制
mutations: {
    increase: (state) => {
        const thisState = {...state};
        thisState.counter++;
        Object.assign(state, thisState);
    }
}`

在上面,您可以复制现有状态,修改复制状态上的计数器,然后用新更新的状态替换现有状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44657142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档