2016-06-05 3 views
11

Wenn ich so etwas wieWie greife ich Refs einer untergeordneten Komponente in der übergeordneten Komponente

<Parent> 
    <Child1 /> 
    <Child2 /> 
    <Child3 /> 
</Parent> 

Und ich will von Child2 zugreifen, wo ich refs="child2refs" haben, wie kann ich das tun?

+0

können Sie Ihren Code reagieren hier posten? this.props.children sollte in diesem Fall immer ein Wort enthalten ... – JordanHendrix

+0

Für den Zugriff auf das Kind können wir ref hinzufügen und darauf zugreifen durch this.refs.child. Dies funktioniert nicht bei verbundenen Komponenten (eine Komponente, die mit Redux oder anderen Plugins verbunden ist). Wir müssen getWrappedInstance() verwenden, um die umbrochene Instanz zu erhalten, und dann können wir auf den Status, die Referenzen und die Methoden dieser Komponente zugreifen. Hier ist das Video erklärt es - https://youtu.be/VpdKjocgCtA – Prem

Antwort

5

Zuerst greifen Sie die Kinder mit: this.props.children, jedes Kind wird dann seine ref als Eigentum haben.

+2

wenn ich console.log (this.props.children) von der übergeordneten Komponente rendern, zeigt es undefined :( – user1354934

+0

post, dass der Code ... – JordanHendrix

+0

seine a viel Code kann ich meine Repo verbinden – user1354934

15

Wenn es nicht das vorgeschlagene Muster aus dem React docs extrahiert vermieden werden würde:

import React, {Component} from 'react'; 

const Child = ({setRef}) => <input type="text" ref={setRef} />; 

class Parent extends Component { 
    constructor(props) { 
     super(props); 
     this.setRef = this.setRef.bind(this); 
    } 
    componentDidMount() { 
     // Call function on Child dom element 
     this.childInput.focus(); 
    } 
    setRef(input) { 
     this.childInput = input; 
    } 
    render() { 
     return <Child setRef={this.setRef} /> 
    } 
} 

Die Eltern gibt eine Funktion als Stütze gebunden Eltern ‚s this. Reagieren Sie rufen die Kinder ‚s ref Rückruf setRef und befestigen Sie die childInput Eigenschaft auf this die, wie wir bereits Punkte auf dem Elternteil bemerkt.

4
  1. Innerhalb der untergeordneten Komponente hinzufügen ref an den Knoten Sie
  2. Innerhalb der übergeordneten Komponente eine ref an die untergeordnete Komponente hinzufügen.
/* 
* Child component 
*/ 
class Child extends React.Component { 
    render() { 
    return (
     <div id="child"> 
     <h1 ref={(node) => { this.heading = node; }}> 
      Child 
     </h1> 
     </div> 
    ); 
    } 
} 

/* 
* Parent component 
*/ 
class Parent extends React.Component { 
    componentDidMount() { 
    // Access child component refs via parent component instance like this 
    console.log(this.child.heading.getDOMNode()); 
    } 

    render() { 
    return (
     <div> 
     <Child 
      ref={(node) => { this.child = node; }} 
     /> 
     </div> 
    ); 
    } 
} 

Demo: https://codepen.io/itsfadnis/pen/aLWVVx?editors=0011

+0

Mein Retter, danke! –

Verwandte Themen