Как удалить вложенный объект по идентификатору из Formik?

#javascript #reactjs #formik

Вопрос:

Я пытаюсь удалить весь элемент рейса из вложенного массива. Я попробовал setFieldvalue. Всякий раз, когда я нахожу определенный идентификатор, я хотел бы удалить весь элемент из Formik. По какой-то причине в Интернете мало решений, даже для ЭТОГО.

 console.log("Formik", formik.values.flightsById);
    for (let item in formik.values.flightsById){
      if(item === 'EF_700001132'){
        console.log("it's here: ", item)
        // React.useEffect(() => () => formik.setFieldValue(item, undefined), [])
        //formik.values.flightsById.remove

      }
    }
    console.log("Formik after del: ", formik.values.flightsById);
 

Результаты Console.log() :
введите описание изображения здесь

Ответ №1:

Некоторые отзывы:

  • Вы упомянули flightsById «вложенный массив», но, судя по вашему снимку экрана, это объект
  • У вас есть правильная идея , используя setFieldValue() для обновления flightsById , хорошая работа 😉
  • Размещение эффекта использования внутри if оператора вызовет ошибку, поскольку это нарушает правила хуков
  • Если вы хотите полностью удалить ключ they EF_700001132 из flightsById , вам нужно будет клонировать flightsById все, кроме этого ключа, а затем передать его в setFieldValue() . Я использовал оператор rest ( ...otherFlights ), чтобы скопировать его без ключа, но в других потоках SO описано множество других методов.

Вот пример удаления одного рейса при нажатии кнопки:

 <button
  type="button"
  onClick={() => {
    const { EF_700001132, ...otherFlights } = formik.values.flightsById;
    formik.setFieldValue("flightsById", otherFlights);
  }}
>
  Delete Flight EF_700001132
</button>
 

Живая демонстрация

Комментарии:

1. Огромное спасибо. В итоге я сделал это «formik.setFieldValue(flightId, не определено);» и удалил весь объект.