您需要创建parent component
所有包含状态的子表单。这是示例:
class Slider extends React.Component {
constructor(props) {
super(props)
this.state = {
page: 0,
values: props.initialValues || {
employed: false,
otherKey: "otherValue"
}
}
this.handleUpdate = this.handleUpdate.bind(this);
this.nexPage = this.nexPage.bind(this);
}
handleUpdate(nextValues) {
this.setState({ values: { ...this.state.values, nextValues} });
}
nextPage() {
this.setState({ page: this.state.page + 1 });
}
renderForm(){
const { values } = this.state;
switch(page) {
case 3: return <ThirdForm {...values}/>;
case 1: return <AnotherForm {...values} />;
default: return <FirstForm {...values}/>;
}
}
render() {
const { values } = this.state
console.log(values);
return (
<div>
{this.renderForm()}
</div>
)
}
}
因此,您的值存储在适当的位置,并且仅由handleUpdate
方法父组件更改。
onChange
当子组件方法触发时,父组件会将其数据传递给子组件。这是示例(其他形式相同...):
class FirstForm extends React.Component {
handleChange(e) {
this.props.handleUpdate({ [e.target.name]: e.target.value });
}
handleSubmit(e) {
e.preventDefault();
this.props.nextPage();
}
render() {
const { value1 } = this.props;
return(
<form onSubmit={this.handleSubmit.bind(this)}>
<input name="value1" value={value1} onChange={this.handleChange.bind(this)}/>
</form>
);
}
}
设置属性name
是输入的键和value
值,并通过 childshandleChange
方法和 parentshandleUpdate
方法将其传递给父组件。
当提交触发时,您需要通过父方法更改页面nextPage
。
编辑:
对于输入宽度样式(范围 min[0] max[100]):
render() {
const { values: { rangeValue } } = this.state;
return(
<div style={{ width: `${rangeValue}%` }}></div>
);
}