@poniatowski

Корректное удаление элемента массива через input onChange как сделать?

Хотелось бы видеть в таблице суммы при каждом отмеченном инпуте. Прошу подсказать, где у меня ошибка? На первый взгляд код работает, но если речь идет о последнем инпуте, то с массива он не удаляется. Подозреваю, что это связано со сплайсом.
https://codesandbox.io/s/7zqmjrnjw1
  • Вопрос задан
  • 208 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега React
А зачем какой-то отдельный массив? Храните состояние чекбоксов в элементах workers.

При изменении состояния чекбоксов обновляйте workers:

inputChange = e => {
  const index = +e.target.dataset.index;

  this.setState({
    workers: this.state.workers.map((n, i) => i === index
      ? { ...n, checked: e.target.checked }
      : n
    ),
  });
}

<input
  type="checkbox"
  data-index={index}
  onChange={this.inputChange}
  checked={item.checked}
/>

Соответственно, вычисление суммы будет выглядеть так:

const sum = this.state.workers.reduce((acc, n) => acc + (n.checked ? n.salary : 0), 0);

https://codesandbox.io/s/ol342z1znz
Ответ написан
Комментировать
@h88p
Pre-Junior HTML Developer
this.state.deleteSum.splice(this.state.deleteSum.indexOf(checkedItem), 1);

При удалении из массива вы удаляли с index, а у цены, которую вы хотите удалить, индекс может не совпадать с this.state.deleteSum
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы