代码之家  ›  专栏  ›  技术社区  ›  milan

更新表单时,初始值不会得到更新

  •  0
  • milan  · 技术社区  · 7 年前

    我有张表格叫 Client 它有一个处理两个 add edit . 添加正在工作,但在编辑表单(表单)时 如果是和编辑表单,则使用初始值填充),初始值不会得到更新。我的意思是,如果我去客户那里更新一个表格 字段称为 client_name 从“abc”到“xyz”,则客户端名称将在服务器中保存为“xyz”,但初始值不会得到更新 因此,如果我再次转到同一表单而不刷新页面并保存表单而不更改任何内容,那么 客户名称 与上一个一起保存 值i“abc”,因为在更新字段时不更新初始值。

    这是我的密码

    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 回复  |  直到 7 年前
        1
  •  1
  •   amoghesturi    7 年前

    您的初始值是从redux状态(mapstatetoprops中的selectclient)填充的,对吗?所以,当您更新/编辑客户机名称时,您是否在redux中更改数据??