Formik FieldArray не перерисовка обновленных значений даже при enableReinitialize - PullRequest
0 голосов
/ 06 марта 2019

Formik enableРеинициализация документации

По умолчанию установлено значение false. Определите, должен ли Formik сбрасывать форму при изменении initialValues ​​(используя глубокое равенство).

Я передаю объект (через реквизит), который я установил в initialValues, определение объекта:

{
  "shoppingList": {
    "title": "",
    "items": [ { "quantity": 0, description: "" } ]
  }
}

Я использую это в компоненте Formik FieldArray. Я обновляю количество в обработчике кнопки onClick, используя встроенную функцию стрелки, которая напрямую изменяет элемент с помощью текущего параметра элемента в items.#map обратном вызове.

Formik не переопределяет форму, чтобы отразить обновленное количество. Formik знает о количестве, так как когда я отправляю форму, количество компонентов, хранящихся в компоненте, перераспределяется в правильное обновленное количество.

1 Ответ

0 голосов
/ 07 марта 2019

Исправлено с помощью arrayHelpers.#replace вместо непосредственного обновления предметов.
документация arrayHelpers

Ответ - глубокое равенство, основанное на значениях.Я не уверен, является ли термин «глубокое равенство» когда-либо действительным в отношении равенства, основанного на ссылках, но мое замешательство привело к тому, что я все равно спросил об этом.

Либо непосредственно мутировал данные в объекте объекта в массиве, либо неизменнымОбновление работает как положено в этом случае.Не уверен, будет ли это иначе, если данные, которые я обновлял, не были примитивными - все еще довольно новыми для удивительно страшного мира JS.

В этом случае также работает с enableReinitialize или без.

Fullрабочий пример здесь, используется мутирующая и неизменная логика обновления (одна для минус количества, другая для плюс количества): https://codesandbox.io/s/k2wzk9q605?fontsize=14

...