2017-07-19 33 views
0

我试图在React上创建一个多步表单。以多步形式反应句柄状态

现在,我已经有了一个简单的方法来渲染组件并在表单提交后显示另一个组件。

这可以在this Gist(道歉的缩进,Github总是拧它)找到。

我该如何处理多形式表单的状态,如果我想有一个假设父组件Form.js渲染每个表单一步像

Form.js -> Step1 (Child of Form) -> Step2 (Child of Step1) -> etc?

我已经试过各种NPM模块,但他们似乎没有相处或工作。

有没有一种方法可以获得父表单组件中所有步骤的状态,以便我可以从那里提交数据(并验证每个步骤并在成功提交表单后重置状态)?

这是当前一步法状态代码

constructor(props) { 
    super(props); 

    this.state = { 
    phone: "", 
    firstname: "", 
    lastname: "", 
    disabled: false, 
    successIsVisible: false 
    } 

    this.handleSubmit = this.handleSubmit.bind(this); 
} 

handleChange(name, value){ 
    let state = this.state; 
    state[name] = value; 
    this.setState({state}); 
} 

实施例输入

<input id="lastname" className="form-control" placeholder="Your last name" onChange={this.handleChange.bind(this, 'lastname')} name="lastname" value={this.state.lastname} /> 
+0

有突出部和在这个要点空间。 Github将选项卡呈现为一定数量的空格。您可以通过传递'?ts = x'来覆盖它用于制表符的空格数,其中x是要使用的空格数。当标签大小设置为2时,您的要点看起来更好https://gist.github.com/Kotoriii/cecf942e2f15899a83be6686a9cae228?ts=2 –

回答

1

最多可以儿童state与回调父组件:

class Parent extends React.Component{ 
    constructor(){ 
     super(); 
     this.state = { 
      childsState: null 
     } 
     this.getChildState = this.getChildState.bind(this); 
    } 
    getChildState(childrenName, childrenState){ 
     this.setState({childrenName: childrenState}); //with click Save button in FirstChildren you will get state of this component 
    } 
    render(){ 
     return(
      <FirstChildren getChildState={this.getChildState}/> 
     ) 
    } 
} 

class FirstChildren extends React.Component{ 
    constructor(){ 
     super(); 
     this.state = { 
      data: null 
     } 
     this.saveData = this.saveData.bind(this); 
    } 
    saveData(e){ 
     this.setState({data: e.target.value}) 
    } 
    render(){ 
     return(
      <div> 
       <input type="text" onBlur={() => this.saveData(e)} /> 
       <button onClick={() => this.props.getChildState("firstChildsState", this.state)}> Save </button> 
      </div> 
     ); 
    } 
} 
+0

谢谢。我不了解getChildState方法。我如何从小孩的输入中获得特定的状态/值?如果一个孩子有很多输入状态会怎么样? – Doge

+0

@Doge,在我的变体中,我将一个输入的值保存到'state'(孩子的)。然后点击按钮,我将组件的所有'state'作为参数发送给回调函数。如果你有很多输入,你需要把所有的值保存到''子'的'状态'中并且发送这个状态。 – Andrew

+0

我真的很感谢你的帮助!然而,我很难理解你将如何发送多个输入的状态,以及它如何与另一个孩子一起工作。 – Doge