2016-04-12 12 views
1

私はAPPに<Modal/>コンポーネントを持っています。React Props = {this.refs.something}は未定義です

Modalには、コンポーネントの状態を変更する2つのメソッドshow()およびhide()があります。私のアプリで

私が持っている:

<App> 
    <Modal ref="modal"/> 
    <Menu openModal={this.refs.modal.show}/> 
</App> 

しかし、メニューthis.props.openModalの内側には定義されていません。

誰かが私の理由を説明できますか?

+1

答えはありませんが、私はあなたにそれを表示するか隠すためにモーダルで小道具を使用することをお勧めします。 refsを使用することは、ほとんどの場合、特にそのような命令的呼び出しの場合、反パターンです。したがって、openModalでは、状態を{show:true}に変更し、次にshow = {this.state.show}をModalに渡します。 – iofjuupasli

+0

'this.refs.modal.show'の代わりにタイプミスがあるとは分かりません。メニュー内に –

+0

があります。私はモーダルオープンをトリガーしたい要素があります私はこの正しい方法で達成していますか? – Hiero

答えて

4

レンダリング時にthis.refs.modalがまだ定義されていない可能性があります。

あなたがする必要があるのは、Appコンポーネント上にいくつかの状態があり、その状態を変更するためのコールバックがあり、それがModalに継承されます。

getInitialState: function() { 
    return {modalOpen: false}; 
}, 
setModalOpen: function(open) { 
    this.setState({modalOpen: false}); 
} 
... 
render: function() { 
    return (
     <App> 
      <Modal open={this.state.modalOpen} setOpen={this.setModalOpen}/> 
      <Menu openModal={this.setModalOpen}/> 
     </App> 
    ); 
} 
あなたはその後、小道具としてモーダルの状態を読み取ることができますが、それだと、ノートもモーダル・コンポーネントは、それを、アプリケーションコンポーネントに状態を設定し、唯一の小道具を使用するコールバックを使用しないでオーバーライドする必要があることを

自身の内部状態。