2017-07-19 18 views
0

Reactで複数ステップフォームを作成しようとしています。ハンドルステートを複数ステップ形式で処理する

今のところ、フォームを送信すると、コンポーネントをレンダリングして別のコンポーネントを表示するワンステップフォームがありました。

これはthis Gistにあります(インデント用の謝罪、Githubはいつもそれをねじ込むでしょう)。

私は、さまざまなNPMモジュールを試してみたのは、親コンポーネント Form.js

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

などの各フォームのステップをレンダリングしましょう持つようにしたい場合、私は、マルチフォームフォームの状態を処理するにはどうすればよい

、しかし、彼らは一緒にやっていないか働いていないようです。

親フォームコンポーネントのすべてのステップの状態を取得する方法はありますか。そこからデータを送信できます(また、各ステップを検証してフォームを正常に送信した後に状態をリセットすることもできます)。

この

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、私の変法では、私は1つの入力の値を 'state'(子)に保存しています。その後、ボタンをクリックすると、コールバック関数の引数として、すべての 'state'のコンポーネントを' parent'まで送ります。多くの入力がある場合は、すべての値を 'child'の' state'に保存し、この状態を送信する必要があります。 – Andrew

+0

本当にありがとうございました!しかし、私はあなたが複数の入力の状​​態をどのように送るのか、それが別の子供と同様にどのように働くのか把握するのに苦労しています。 – Doge

関連する問題