Состояние Eslint уже объявлено [Vuex]

Я запускаю ESLint и в настоящее время сталкиваюсь со следующей ошибкой ESLint:

ошибка 'состояние' уже объявлено в верхней области без тени

const state = {
    date: '',
    show: false
};

const getters = {
    date: state => state.date,
    show: state => state.show
};

const mutations = {
    updateDate(state, payload) {
        state.date = payload.date;
    },
    showDatePicker(state) {
        state.show = true;
    }
};

export default {
    state,
    getters,
    mutations
};

Как лучше всего это исправить?


person Stephan-v    schedule 08.05.2017    source источник


Ответы (4)


Лучший способ исправить это - прочитать документацию о правиле eslint «no-shadow».

Из этой документации лучшим решением, вероятно, будет включение исключения для этой переменной с опцией «разрешить».

Вы можете добавить это с комментарием к файлу js, чтобы исключение оставалось локальным:

/* eslint no-shadow: ["error", { "allow": ["state"] }]*/
person Linus Borg    schedule 08.05.2017
comment
и для тех, у кого возникает ошибка no-param-reassign, это решение: / * eslint no-param-reassign: [error, {props: true, ignorePropertyModificationsFor: [state]}] * / - person kospol; 10.08.2017

Лучшее решение - ответ @Linus Borg.

Если вы ищете альтернативу, вы можете объявить константу state под остальными. Это предотвратит затенение переменных, потому что state еще не будет объявлен во внешней области видимости.

Пример:

const getters = {
    date: state => state.date,
    show: state => state.show
};

const mutations = {
    updateDate(state, payload) {
        state.date = payload.date;
    },
    showDatePicker(state) {
        state.show = true;
    }
};

const state = {
    date: '',
    show: false
};

export default {
    state,
    getters,
    mutations
};
person Ricky    schedule 06.09.2017

Если еще не поздно

const data = {
    date: '',
    show: false
};

const getters = {
    date: state => state.date,
    show: state => state.show
};

const mutations = {
    updateDate(state, payload) {
        state.date = payload.date;
    },
    showDatePicker(state) {
        state.show = true;
    }
};

export default {
    state: data,
    getters,
    mutations
};

в основном вы определяете данные своего магазина как data и экспортируете их как состояние state: data

person allochi    schedule 18.02.2019

У меня была та же проблема, что и у меня, когда я использовал конфигурацию airbnb eslint, несовместимую с vuex.

Это сработало для меня после перезапуска среды разработки.

Я создал новый .eslintrc.js файл в папке своего магазина и добавил их туда

"no-shadow": ["error", { "allow": ["state"] }],
"no-param-reassign": [
  "error",
  {
    "props": true,
    "ignorePropertyModificationsFor": [ // All properties except state are in the ignorePropertyModificationsFor array by default.
      "state",
      "acc",
      "e",
      "ctx",
      "req",
      "request",
      "res",
      "response",
      "$scope"
    ]
  }
],
person wadclapp    schedule 03.08.2020