2016-06-11 12 views
0

ReactJSでネストされたフォーム要素の値を取得するにはどうすればよいですか?ネストされたフォームの値に反応する

レッツは、私は、次の要素でフォームを持っていると言う:

<form onSubmit={handleSubmit(e)}> 
    <input ref="name" type="text" /> 
    { /* possibly unlimited number of emails */ } 
    <input ref="email[]" type="text" /> 
    <input ref="email[]" type="text" /> 
    { /* possibly unlimited number of book objects */ } 
    <fieldset> 
    <input ref="title" type="text" /> 
    <input ref="author" type="text" /> 
    </fieldset> 
    <fieldset> 
    <input ref="title" type="text" /> 
    <input ref="author" type="text" /> 
    </fieldset> 
</form> 

私はこれらのフィールドの値を取得したいのonSubmit。 最も簡単な方法は、最も直感的にはを通じて次のようになります。

this.refs 

しかし、それはすべての引用文献を平らにし、配列要素の最後を返します。だから、のようなものを返します:

{ name: '', 
    email:['', ''], 
    books: [ 
    { title: '', author: '' }, 
    { title: '', author: '' } 
    ] 
} 

または類似のもの:

{ name: '', email[]: '', title: '', author: '' } 

を私は何を取得したいことは、次のようになります。

おそらく、refsを使用するのが最良の選択肢ではないかもしれませんが、他の選択肢についてはわかりません。

EDIT 実行:私が達成したいものに

e.target.childNodes 

戻り似たようなもののので、それらのうちの値を得ることが仕事のかなり多くがあり、それはプレーンなHTMLノードを返します(ためのいくつかのカスタムメソッドを書きます処理ノードツリー)。

答えて

2

inputは、IDのいくつかの種類やkeyを持っているだろう場合は、おそらく行うことができます:

<input key="[YOUR_KEY]" type="text" onChange={ (e) => { this.setState({ 
    [YOUR_KEY]: e.currentTarget.value 
}); } } /> 

そして、あなたは状態から直接、すべての値を参照することができます。

キーでも増分番号として任意でよい:

<input key="email_1" type="text" onChange={ (e) => { this.setState({ email_1: e.currentTarget.value }); } } /> 
<input key="email_2" type="text" onChange={ (e) => { this.setState({ email_2: e.currentTarget.value }); } } /> 
<input key="email_3" type="text" onChange={ (e) => { this.setState({ email_3: e.currentTarget.value }); } } /> 
<input key="email_4" type="text" onChange={ (e) => { this.setState({ email_4: e.currentTarget.value }); } } /> 

その後、あなたはthis.state.email_2で、たとえば第二電子メールのフィールドを参照することができます。

+0

私はreduxストアを自分のフォームのモデルとして使用しますが、変更ごとにアプリの状態を更新したくありません。私はそれがどういうわけか、提出時にのみすべての値を得ることができるはずだと思います。 – jmarceli

+1

reduxを使用しても、この方法を使用できます。 reduxからデータを読み込む代わりにreduxストアを更新するときは、コンポーネントの状態から読み込みます。 –

+0

私はそれがReduxで動作することを知っています。これは私の現在の解決策ですが、私はストアとの同期を保つことなく直接値を取得する方法を探しています。 – jmarceli

関連する問題