Я пытаюсь заполучить поле в моей форме Redux и отправить на нем действие ИЗМЕНЕНИЯ значений формы Redux, чтобы установить значение поля в пустую строку (''
). Поле глубоко вложено в форму. Путь к полю (называемому campus
) в форме выглядит так:
state.form.MY_FORM.values.assets[0].locations[1].location.campus
Вот действие, которое я пытаюсь отправить в этом поле:
dispatch(change('MY_FORM', 'state.form.MY_FORM.values.assets[0].locations[1].location.campus', ''))
change
здесь соответствует действию CHANGE
Redux-Form (которое используется для изменения значений полей).
Моя проблема в том, что Redux Form, кажется, пытается полностью удалить поле campus
из состояния поля, когда отправляется действие, указанное выше.
Предыдущее состояние, действие и следующее состояние выглядят так:
Предыдущее состояние:
state.form.MY_FORM.values.assets[0].locations[1].location.campus: 'Some Campus'
state.form.MY_FORM.values.assets[0].locations[1].location.building: 'Some Building'
действие и действие. полезная нагрузка
action:
meta:
field: "assets[0].locations[1].location.campus"
form: "MY_FORM"
persistentSubmitErrors: undefined
touch: undefined
payload: ""
type: "@@redux-form/CHANGE"
Следующее состояние:
state.form.MY_FORM.values.assets[0].locations[1].location.building: 'Some Building'
Как видите, в следующем состоянии поле campus
вообще отсутствует. Кроме того, полезной нагрузкой действия CHANGE является ""
, поэтому я не уверен, почему он пытается что-то сделать, кроме простого обновления значения поля, как должно.
Есть ли известная ошибка Redux Form, которая пытается избавиться от поля, если значение поля установлено на пустую строку? Если нет, какие-либо другие предложения о том, что может быть причиной этого?
Взглянув на реализация редуктораredux-form
, вы обнаружите, что редуктор проверяет, является ли payload
действия CHANGE
пустой строкой, и удаляет ценить этого поля из хранилища:
if (initial === undefined && payload === '') {
result = deleteInWithCleanUp(result, `values.${field}`)
}
Стоит упомянуть, что само поле не удаляется - вы все еще можете найти его внутри объекта registeredFields
внутри состояния.