ReactJS es-lint: оператор возврата не должен содержать присваивания
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
присвоение as (которое по совпадению также является мутацией состояния).
Вы можете обойтись простым добавлением одного к текущему состоянию. Вероятно, это преобразует ваш массив в объект, поэтому будьте осторожны.
setMonthlyIncidents((prevIncidents) => {
return {
...prevIncidents,
[incidentMonth]: prevIncidents[incidentMonth] + 1,
}
})
Обычно при таком обновлении состояния предпочтительнее сопоставить существующее состояние со следующим состоянием и обновить элемент. Похоже, incidentMonth
это просто индекс массива, поэтому вы можете сопоставить инцидент по индексу. Это гарантирует, что состояние остается массивом.
setMonthlyIncidents((prevIncidents) =>
prevIncidents.map((incident, index) =>
incident + index === incidentMonth ? 1 : 0
)
);
ПЫТАТЬСЯ
setMonthlyIncidents ({... prevIncidents, [инцидентМесяц]: prevIncidents [инцидентМесяц] + 1,
}).
вам просто нужно не назначать состояние при его возврате. Плюс, я действительно не понимаю, почему вы создаете совершенно новую функцию для установки состояния? (что делает setStateVariable
крючок?). Вы также можете отключить es-lint для этой строки.