#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);
Ответ №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, не определено);» и удалил весь объект.