Как я могу обновить мои начальные значения после того, как они отредактированы и отправлены в Redux-Form? - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время у меня есть форма в Redux-форме, которая извлекает начальные значения из API. Однако всякий раз, когда я редактирую одно из этих значений и затем отправляю форму, она возвращает старое начальное значение (кажется, не обновляется). Я хотел бы иметь возможность редактировать поле, отправить, а затем обновить начальное значение до нового значения, чтобы при повторной загрузке формы вы увидели самые последние изменения / изменения. Прямо сейчас, вот как я инициализирую свои данные:

componentDidMount(){
  this.props.offerCallBack()
    .then(c => {
         this.setState({
           offerContent: c,
         });
         this.handleInitialize();
     })
    .catch(error => {
      console.log(error);
     });
 }



handleInitialize() {
    const offerContent = JSON.parse(this.state.offerContent.content);

    const initData = {
      "questionText": offerContent.question_text === null ? "Enter Question Text" : offerContent.question_text,
      "questionType": offerContent.question_type === null ? "" : offerContent.question_type,

   this.props.initialize(initData);

}

Вот моя функция отправки:

 onSubmit(values) {
      console.log(values);
      const questionData = Object.assign({}, values, { questionText: undefined });
      this.props.saveOffer(questionData);

    }

Пример одного из моих полей внутри моего

                   <Field
                          name="questionText"
                          type="text"
                          id="questionText"
                          component={renderField}
                          label="Question Text"
                          onChange={this.handleChange}
                      />

Тогда низ моей редукционной формы

const form = reduxForm({
  form: 'offerquestion',
  enableReinitialize: true
});

function mapStateToProps(state) {
  return {
    offerContent: state.offerContent,
    initialValues: state.offerContent
  };
}  
export default connect(mapStateToProps)(form(OfferExample));

Любая помощь будет принята с благодарностью, я застрял на этом в течение нескольких дней!

1 Ответ

1 голос
/ 12 марта 2019

Похоже, что вы используете state в методе handleInitilize, помните, что когда вы setState, состояние не обновляется должным образом (это асинхронная функция ). Поэтому, если вы добавите обратный вызов в setState, а затем вызовете метод handleInitialize, вы уверены, что значение существует.

componentDidMount(){
  this.props.offerCallBack()
    .then(c => {
         this.setState({
           offerContent: c,
         }, () => {
         // You can handle here and make sure the state has updated
         console.log( this.state.offerContent );
         this.handleInitialize();
       });
     })
    .catch(error => {
      console.log(error);
     });
 }
...