1

我正在开发一个 React 项目,在其中一个组件中,我通过 react-router-dom 链接将属性传递给另一个组件,如下所示:

let updateEmpInfo;

...

<Button component={Link}
        halfWidth
        variant="contained"
        color="primary"
        preventDefault
        onClick={getEmpInfo}
        to={{pathname: "/update",
        state:
           {id: updateEmpInfo.id,
            name: updateEmpInfo.name,
            department: updateEmpInfo.department,
            gender: updateEmpInfo.gender}
            }}>Update information
</Button>

我的问题是专门关于“状态”属性的。如您所见,我传递了几个状态参数(id、name、department 和gender)。由于 Link 组件位于 render 方法内部,因此需要在 render 方法的某处定义 updateEmpInfo 变量。我正在尝试从用户那里获取输入,并在组件渲染后根据他们的输入设置所有 updateEmpInfo 属性的值。所有这些都将传递给 Link 的 state 属性。我试图在 getEmpInfo 函数中这样做。但是,无论输入如何,state 属性都会保留在渲染期间设置的所有初始值。单击链接后,是否可以根据用户输入更改 updateEmpInfo 属性?我的问题很清楚。我很乐意提供任何其他信息。先感谢您!

4

1 回答 1

0

如果我理解正确,传递的值不是用户调整它们的方式。我想它是 InputFields 缺少的 onChange-Listener 或整个表单的 onSubmit 。

import { Component } from 'react';
import { withRouter } from 'react-router-dom';

class MyEmployeeForm extends Component {

constructor(props) {
    super(props);
    this.state = {
     id: "",
     name: "",
     department: "",
     gender: ""
    };
  }

  onChange = (event) => {
    this.setState({[event.target.name]: event.target.value});
  }

onUpdate = (event) => {
    event.preventDefault();
    this.props.history.push({
    pathname: '/update', 
    state: this.state});
  }



render() {
    <form>
        <input type="text" name="id" placeholder="id" value={this.state.id} onChange={this.onChange} />
        <input type="text" name="name" placeholder="name" value={this.state.name} onChange={this.onChange}/>
        <input type="text" name="department" placeholder="department" value={this.state.department} onChange={this.onChange}/>
        <input type="text" name="gender" placeholder="gender" value={this.state.gender} onChange={this.onChange}/>
     </form>);

    <Button component={Link}
            halfWidth
            variant="contained"
            color="primary"
            onClick={this.onUpdate}>
            Update information
    </Button>
}

}

export default withRouter(MyEmployeeForm);

请参阅此处在 ReactJS 中获取表单数据如何在 react-router v4 中使用 history.push/Link/Redirect 传递参数?

于 2020-03-31T01:07:58.863 回答