2017-05-15 9 views
0

を反応させるのに階層間でフォーカスを設定する方法:私はこのようなコンポーネントの階層を持っている私のリアクトチャット・アプリケーションで

ThreadList 
    Thread 
     Reply 
      ReplyMenu 
       ReplyButton 
        <button onClick="?" /> 

     Reply 
     Reply 
     . 
     NewReply 
      <input ref={(input) => {this.replyInput = input}}> 

私が欲しいのは、私がReplyButtonを押したときに、フォーカスに設定されなければならないということですNewReplyコンポーネント内の入力。誰でも私にReactでこれを達成する方法を説明することはできますか?フォーカスを設定するコンポーネントが入力の直接の親であるが、階層の別の部分ではない例を見てきました。

おかげで、 フランク

答えて

0

あなたが入力にfocus()を呼び出してみましたか?

render(){ 
    const _this = this; 
    <button onClick={() => _this.replyInput.focus()} /> 
} 
+0

はい、しかし、「これは」NewReplyコンポーネントにReplyButtonの成分を意味していないことから、私は「未定義のプロパティを読み取ることができません 『フォーカス』を。」受け取ります –

+0

@FrankJusnesああ、参照を保持するためにレンダリングコンポーネントを読み込む前に 'this'を保存することができます。 'NewReply'の' ref'も同じです。 –

0

あなたは親Replyコンポーネントにクリックイベントに渡し、そこからフォーカス機能を呼び出す必要があります。だから、あなたも

focusNewReply() { 
    this.props.focusNewReply(); 
} 
ReplyMenu

返信

focusNewReply() { 
    this.replyInput.focus(); 
} 

ようReplyButtonコンポーネント

気にいらまでReplyコンポーネントからこの子のそれぞれに、この関数に渡す必要があります

ReplyButton

<button onClick={()=>{this.props.focusNewReply()}}> 
関連する問題