2017-05-15 3 views
0
Reagieren

In meinem Reagieren Chat-Anwendung habe ich eine Hierarchie von Komponenten wie folgt aus:Wie Fokus über eine Hierarchie setzen in

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

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

Was ich will, ist, dass, wenn ich die ReplyButton drücken, sollte Fokus eingestellt werden die Eingabe in der NewReply-Komponente. Kann mir jemand erklären, wie ich das in React erreichen kann? Ich habe Beispiele gesehen, bei denen die Komponente, die den Fokus setzt, ein unmittelbares Elternteil der Eingabe ist, aber nicht in einem anderen Teil der Hierarchie.

Danke, Frank

Antwort

0

Versuchen Sie focus() am Eingang Aufruf?

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

Ja, aber da „dies“ auf die Komponente ReplyButton bezieht und nicht auf die NewReply Komponente, erhalte ich einen „Can not Eigenschaft‚Fokus‘undefinierte lesen.“ –

+0

@FrankJusnes Ah Ich sehe, Sie können 'this' speichern, bevor Sie die Render-Komponenten herunterfahren, um die Referenz zu behalten. Dasselbe gilt für die 'ref' in' NewReply'. –

0

Sie werden auf dem Click-Ereignis an die Mutter Reply Komponente passieren müssen und dann von dort den Fokus-Funktion aufrufen. Sie müssen also auch auf diese Funktion, um von Reply Komponente zu jeder dieses Kind bis ReplyButton Komponente

Somthing wie

Antworten

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

ReplyMenu

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

ReplyButton

<button onClick={()=>{this.props.focusNewReply()}}> 
Verwandte Themen