initialValues ​​не получает обновления при обновлении формы - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть форма с именем Client, которая имеет одну форму, которая обрабатывает как add, так и edit.Add работает, но при редактировании формы (форма заполняется initialValues, если она есть, и форма редактирования), initialValues ​​не обновляется.Я имею в виду, что если я зайду в форму клиента A и обновлю поле с именем client_name с 'abc' до 'xyz', то client_name будет сохранено как 'xyz' на сервере, но initialValues ​​не будет обновлено, поэтому, если я снова пойдув ту же форму, не обновляя страницу и сохраняя форму, ничего не меняя, тогда client_name сохраняется с предыдущим значением i.'abc', поскольку initialValues ​​не обновляется при обновлении поля.

Вот мой код

import React, { Component } from 'react';
import { reduxForm, initialize } from 'redux-form';


const mapDispatchToProps = (dispatch, props) => ({
  addClient: clientData => dispatch(addClient(clientData)),
  editClient: clientData => dispatch(editClient(clientData)),
  loadClient: () => dispatch(loadClient(props.match.params.company)),
  resetClient: () => dispatch(resetClient()),
});

const mapStateToProps = createStructuredSelector({
  initialValues: selectClient(),
});


class Client extends Component<propsCheck> {
  state = {
    client: initialState,
    isLoading: false,
  };

  componentDidMount() {
    if (this.props.match.params.company) {
      this.props.loadClient();
    }
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.match.params.company) {
      this.props.loadClient();
    } else {
      this.props.resetClient();
    }
  }

  handleChange = ({ target: { name, value } }) => {
    this.setState({ client: { ...this.state.client, [name]: value } });
  };

  handleSubmit = event => {
    event.preventDefault();
    const { client } = this.state;
    const { initialValues, addClient: add, editClient: edit } = this.props;
    if (isEmpty(initialValues)) {
      add(client);
    } else {
      const updatedClient = updatedValue(initialValues, client, 'id');
      edit(updatedClient);
    }
    this.setState({ isLoading: true });
  };

  render() {
    const { invalid, submitting, initialValues } = this.props;
    return (
          <ClientForm
            loading={this.state.isLoading}
            handleChange={this.handleChange}
            handleSubmit={this.handleSubmit}
            disabled={invalid || submitting}
            type={initialValues && initialValues.id ? 'Edit' : 'Add'}
            reset={this.props.reset}
            history={this.props.history}
          />
    );
  }
}


const withReduxForm = reduxForm({
  form: 'clientForm',
  fields: requiredFields,
  validate,
  enableReinitialize: true,
})(Client);

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(withReduxForm);

1 Ответ

0 голосов
/ 04 декабря 2018

Ваши начальные значения заполняются из состояния избыточности (selectClient в mapStateToProps), верно?Итак, когда вы обновляете / редактируете client_name, вы изменяете данные в приставке ??

...