2016-08-02 4 views
-1

私は私の「InputBox関数は、」私は、フォームを実行するために、私のコンテナコンポーネントで入力の値を取得したいと思いプレゼンテーションコンポーネント入力の値がコンポーネント階層の奥深くにある場合、その値にアクセスするにはどうすればよいですか?

<input type="text" id="inputBox" ref="inputBox" name="inputBox" value={this.state.inputVal} onChange={this.handleChange} /> 

であるコンポーネント3つのレベルの深<Foo><Bar><InputBox/><Bar></Foo>を反応させるのにコードの下に持っている、と言うことができます検証。私は私がどのアプローチ知っていただきたいと思い

this.refs.inputBox.value 

(私の参照文献は非常に深いときしかし、以下のいずれかが動作しません)バニラJS

document.getElementById('inputBox').value 

またはREFを反応させるの使用のいずれかを使用して値を取得することができますパフォーマンス面で優れているのはなぜですか? Reactのrefアプローチを使用してコンポーネント階層の奥深くにある場合、入力の値にアクセスする方法を知りたいですか?

+1

が重複する可能性を要素](http://stackoverflow.com/questions/36415198/finddomnode-vs-getelementbyid-for-plain-dom-elements) – Miah

+0

@Miah今質問を更新しました –

答えて

-4

私はこれにinnerHTMLを使用します。

var input = document.GetElementByID('inputBox').innerHTML; 

この入力変数を使用して検証を行うことができるようになりました。

+2

'document.GetElementByID'は存在しないのでinput要素の 'innerHTML'プロパティは何もしません。それは遠隔で役に立つものではありません。 – Quentin

+0

これは非常に悪い答えです。こんなことしないで。 –

0

refsを使用してください。しかし...

文字列リファレンスは非推奨ではありませんが、それらはレガシーと見なされますが、将来はいつでも廃止予定です。コールバック の参照が優先されます。 - FB https://facebook.github.io/react/docs/more-about-refs.html#the-ref-string-attribute

ので、代わり<input ref={el => this.inputEl = el} />ような何かをしてthis.inputEl.valueとしての価値にアクセスします。

いくつかのマイナーなポイント:

  • input="text"は必要ありません。それは、彼らが十分にスケーリングしていない、
  • はIDを避け、デフォルトです(例えばページ内の別の場所で別の要素は、同じIDを与えられている場合は、無効なHTML持っている)、プレーンDOMのためのgetElementByIdを対findDOMNode [の
+0

あなたの答えをありがとう。私はコールバック参照を認識していますが、私の入力ボックスは動的に作成されます。私は動的に作成された入力フィールドのコールバック参照を作成する方法がわかりません(入力は.mapループの内側に作成されます)ので、現在は以下のように文字列の参照を使用しています... ' ' –

関連する問題