使用 React 将状态变量从子级传递到父级
Passing state variables from Child To Parent using React
我觉得有一种更简单的方法可以做到这一切。在用户单击 Submit button
后,我试图将所有 state
变量从 Child
传递到 Parent
。有人可以指出我做错了什么吗?
AddSeanceForm.js(儿童)
class AddSeanceForm extends React.Component{
constructor(...args) {
super(...args);
this.state = {
devices: "",
interval: ""
};
this.handleChange = this.handleChange.bind(this);
this.onSelect = this.onSelect.bind(this);
}
render() {
return (
...
<form onSubmit={(event, devices, interval) => this.props.handleSubmit(event, this.state.devices, this.state.interval)}>
...)
SeanceManager.js(父级)
handleSubmit = (event, devices, interval) => {
event.preventDefault();
console.log(devices, interval)
...
};
这个解决方案有效,但我打算制作更多变量,这似乎不是最佳选择。
为此,您需要在 Parent 组件中定义事件处理程序,并将其作为道具传递给 Child。该事件处理程序将绑定到您的 Parent 组件的执行上下文。此外,在您的 parent 组件中,您可以启动一个空的 state-variable,然后在执行 [=26] 时将 Child 组件中的数据简单地传播 {...obj} =].
如果您需要,这里还有代码沙箱:https://codesandbox.io/s/zxl2owp2np
Parent:
import React from "react";
import Child from "./Child";
class App extends React.Component {
state = {};
updateState = obj => {
this.setState({ ...obj }, () => console.log(this.state));
};
render() {
return (
<div className="App">
<Child updateParent={this.updateState} />
</div>
);
}
}
Child:
import React from "react";
class Child extends React.Component {
state = {
name: "",
age: 0
};
handleOnSubmit = () => {
event.preventDefault();
const childState = this.state;
this.props.updateParent(childState);
};
handleOnChange = event => {
this.setState({
[event.target.name]: event.target.value
});
};
render() {
return (
<form onSubmit={this.handleOnSubmit}>
<input
name="name"
value={this.state.name}
onChange={this.handleOnChange}
/>
<input
name="age"
value={this.state.age}
onChange={this.handleOnChange}
/>
<button type="submit">Submit</button>
</form>
);
}
}
export default Child;
我觉得有一种更简单的方法可以做到这一切。在用户单击 Submit button
后,我试图将所有 state
变量从 Child
传递到 Parent
。有人可以指出我做错了什么吗?
AddSeanceForm.js(儿童)
class AddSeanceForm extends React.Component{
constructor(...args) {
super(...args);
this.state = {
devices: "",
interval: ""
};
this.handleChange = this.handleChange.bind(this);
this.onSelect = this.onSelect.bind(this);
}
render() {
return (
...
<form onSubmit={(event, devices, interval) => this.props.handleSubmit(event, this.state.devices, this.state.interval)}>
...)
SeanceManager.js(父级)
handleSubmit = (event, devices, interval) => {
event.preventDefault();
console.log(devices, interval)
...
};
这个解决方案有效,但我打算制作更多变量,这似乎不是最佳选择。
为此,您需要在 Parent 组件中定义事件处理程序,并将其作为道具传递给 Child。该事件处理程序将绑定到您的 Parent 组件的执行上下文。此外,在您的 parent 组件中,您可以启动一个空的 state-variable,然后在执行 [=26] 时将 Child 组件中的数据简单地传播 {...obj} =].
如果您需要,这里还有代码沙箱:https://codesandbox.io/s/zxl2owp2np
Parent:
import React from "react";
import Child from "./Child";
class App extends React.Component {
state = {};
updateState = obj => {
this.setState({ ...obj }, () => console.log(this.state));
};
render() {
return (
<div className="App">
<Child updateParent={this.updateState} />
</div>
);
}
}
Child:
import React from "react";
class Child extends React.Component {
state = {
name: "",
age: 0
};
handleOnSubmit = () => {
event.preventDefault();
const childState = this.state;
this.props.updateParent(childState);
};
handleOnChange = event => {
this.setState({
[event.target.name]: event.target.value
});
};
render() {
return (
<form onSubmit={this.handleOnSubmit}>
<input
name="name"
value={this.state.name}
onChange={this.handleOnChange}
/>
<input
name="age"
value={this.state.age}
onChange={this.handleOnChange}
/>
<button type="submit">Submit</button>
</form>
);
}
}
export default Child;