2017-03-23 17 views
1

私は1つのスマートコンポーネントと1つのダムコンポーネントを持っています。スマートコンポーネントのダンプコンポーネントにある要素を参照する必要があります。 私は小道具でそれを渡すか??React - ダムコンポーネント(子)からスマートコンポーネント(親)への参照の受け渡し

Dumb: 
export default (props)=>{ 
return(
    <input type='number' ref='element'}/> 
);} 

Smart: 
class Parent extends Component { 
    constructor(props) { 
     super(props); 
    } 
componentDidMount() { 
    const node = this.refs.element; // undefined 
    } 
render(){ 
    return <Dumb { ...this.props }/> 
    } 
} 

答えて

5

あなたはcallback syntax for refsを使用することができます。

DOC 1として
// Dumb: 
export default props => 
    <input type='number' ref={props.setRef} /> 

// Smart: 
class Parent extends Component { 
    constructor(props) { 
     super(props); 
    } 

    setRef(ref) { 
     this.inputRef = ref; 
    } 

    render(){ 
     return <Dumb {...this.props} setRef={this.setRef} /> 
    } 
} 
+0

このアプローチは非常にうまくいきます、ありがとう! :) – Nick1R1

+0

親コンポーネントへの参照を保持しているため、refコンポーネントを子コンポーネントに渡す代わりにコールバックを使用することをお勧めします。単純なコンポーネントはうまく動作しますが、ベストプラクティスのように大きなコンポーネントや複雑なコンポーネントの場合は、コールバックを使用する必要があります。 –

2

彼らはインスタンスを持っていないので、あなたは、機能コンポーネントのref属性を使用することはできません。ライフサイクル メソッドまたは状態が必要なときと同じように、コンポーネントを参照する必要がある場合は、コンポーネントをクラス に変換する必要があります。

refを使用する場合は、classを使用する必要があります。

これを確認してください:https://github.com/facebook/react/issues/4936

関連する問題