Обновление формы React Redux нетронуто после изменения

Мне нужно сделать отправку и изменить данные формы после загрузки страницы:

dispatch(change("project", field, value));

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


person max li    schedule 16.10.2017    source источник


Ответы (3)


Для этого вы можете предоставить initialValues украшенному компоненту reduxForm:

compose(
  connect((state) => ({
    initialValues: state.someData
  })),
  reduxForm({
    form: 'someForm'
  })
)(Component)

Или, как вариант, вы можете использовать initialize создатель действий из redux-form после того, как данные будут загружены с сервера:

dispatch(initialize('myForm', newInitialValues));

Отправка действия initialize установит состояние вашей формы в pristine

person 1ven    schedule 16.10.2017
comment
нет, у меня уже есть начальные значения при запуске моего первого API, затем запустите второй API и используйте change(... для обновления некоторых полей в InitialValue, а в моем компоненте я снова запускаю iniialize(, но нетронутое все равно меняется на false. - person max li; 16.10.2017
comment
@maxli, вы можете попробовать запустить initialize с новыми значениями, не отправляя действие change? - person 1ven; 16.10.2017

Я не знаю, правильный ли это способ, но он работает для меня.

this.props.dispatch({type: '@@redux-form/BLUR', payload: yourPayload, meta: {form: "formName", field: "formField", touch: true}});

Я отправляю приведенный выше код в событие onChange моего поля, заставляя избыточную форму обновлять первоначальный статус.

person viniciusalvess    schedule 17.03.2019
comment
Здравствуйте, я тоже так делаю, но не работает. Тоже на смене. Какие-нибудь мысли? - person Michael Paccione; 12.03.2020

Вы можете установить для флага молчания значение true, это не будет обновлять нетронутые и грязные флаги. Пример: actions.change(model, value, { silent: true }) Вы также можете использовать actions.load(). Разница между load() и change()

Это отличается от вызова action.change(model, value, {silent: true}). Оба похожи с одним основным отличием: action.load также обновляет .loadedValue, а неактивное изменение — нет.

https://davidkpiano.github.io/react-redux-form/docs/api/actions.html#actions-load

person lee    schedule 01.05.2018
comment
Так что это относится только к старой react-Redux-Form, которая сейчас находится в режиме обслуживания. последняя версия была выпущена в 2017 году. Похоже, этой функции нет в более активном Redux- Форма проекта. - person sirclesam; 13.08.2020