ReactJS es-lint: оператор возврата не должен содержать присваивания

Aug 20 2020

es-lint не работает в этом случае: оператор возврата не должен содержать присваивание без возврата-присваивание

Я просмотрел эту ветку, но безрезультатно: функция стрелки не должна возвращать назначение no-return-assign

Что я могу сделать здесь, чтобы удовлетворить es-lint?

Моя переменная состояния

const [monthlyIncidents, setMonthlyIncidents] = useState([
    // monthlyIncidents[0] -> January ... monthlyIncidents[11] -> December
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
  ])

Как я обновляю состояние

setMonthlyIncidents((prevIncidents) => {
   return { ...prevIncidents, [incidentMonth]: monthlyIncidents[incidentMonth] += 1 }
})

Ответы

1 DrewReese Aug 20 2020 at 13:17

Я предполагаю, что он видит += 1присвоение as (которое по совпадению также является мутацией состояния).

Вы можете обойтись простым добавлением одного к текущему состоянию. Вероятно, это преобразует ваш массив в объект, поэтому будьте осторожны.

setMonthlyIncidents((prevIncidents) => {
  return {
    ...prevIncidents,
    [incidentMonth]: prevIncidents[incidentMonth] + 1,
  }
})

Обычно при таком обновлении состояния предпочтительнее сопоставить существующее состояние со следующим состоянием и обновить элемент. Похоже, incidentMonthэто просто индекс массива, поэтому вы можете сопоставить инцидент по индексу. Это гарантирует, что состояние остается массивом.

setMonthlyIncidents((prevIncidents) =>
  prevIncidents.map((incident, index) =>
    incident + index === incidentMonth ? 1 : 0
  )
);
1 HaroonAzharKhan Aug 20 2020 at 13:40

ПЫТАТЬСЯ

setMonthlyIncidents ({... prevIncidents, [инцидентМесяц]: prevIncidents [инцидентМесяц] + 1,

}).

вам просто нужно не назначать состояние при его возврате. Плюс, я действительно не понимаю, почему вы создаете совершенно новую функцию для установки состояния? (что делает setStateVariableкрючок?). Вы также можете отключить es-lint для этой строки.