Поле удаления Redux-Form при действии CHANGE - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь завладеть полем в моей форме 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 и action.payload

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что будет пытаться избавиться от поля, если значение поля установлено в пустую строку?Если нет, то какие-либо другие предложения о том, что может быть причиной этого?

1 Ответ

0 голосов
/ 25 октября 2018

Посмотрев на реализацию редуктора из redux-form, вы обнаружите, что редуктор проверяет, является ли действие payload из CHANGE пустой строкой, и удаляет значение * 1007.* этого поля из хранилища:

if (initial === undefined && payload === '') {
    result = deleteInWithCleanUp(result, `values.${field}`)
} 

Стоит отметить, что само поле не удалено - его все еще можно найти внутри registeredFields объекта внутри состояния.

...