2017-12-03 28 views
1

私は、ボタンリストをレンダリングするコンポーネントを持っています。この 'ButtonList'を呼び出すことができます。いずれかのボタンをクリックすると、イベントはそのようにバブルアップされています。これに対応して子コンポーネントの状態を設定するにはどうすればよいですか?

<ButtonList onButtonPressed={(mins) => { console.log(mins); }} /> 

、私はそのButtonListを隠し、現在非表示になっている別のコンポーネントを示したいと思います。 ButtonListには、 "state {visible:true}"のようないくつかの状態があり、これをレンダリングを停止するように切り替える必要があります。どのようにして、そのButtonListの状態を切り替える呼び出しを行い、このビュー内の他のコンポーネントを呼び出して、可視状態を表示するように切り替えることができますか?

ありがとうございました。

答えて

1
swappingComponentsExample =() => { 
    return (
     <View> 
     {this.state.showButtonList ? (
      <ButtonList 
      onButtonPressed={mins => { 
       this.setState({showButtonList: false}); 
       console.log(mins); 
      }} 
      /> 
     ) : (
      <OtherComponent /> 
     )} 
     </View> 
    ); 
    }; 

    // Renders both components but passes style override to hide the object 
    // ButtonList/OtherComponent are not destroyed and recreated using this method 
    hidingExample =() => { 
    return (
     <View> 
     <ButtonList 
      onButtonPressed={mins => { 
      this.setState({showButtonList: false}); 
      console.log(mins); 
      }} 
      style={!this.state.showButtonList && {display: 'none'}} 
     /> 

     <OtherComponent 
      style={this.state.showButtonList && {display: 'none'}} 
     /> 
     </View> 
    ); 
    }; 
+0

これを見て、私は状態が間違っていると思っていたと思う。したがって、コンポーネントの非表示/表示は、コンポーネントを使用している親コンポーネントによって処理されます。子コンポーネントで定義された関数を呼び出す必要がある時がありますか?もしそうなら、これはどのように行われますか? –

+1

あなたは子どもに小道具を通すことができます。これは、親がそれを参照しているが、それは乱雑になります。関数呼び出しをトリガーするために小道具を子どもに渡すことは、自分の状況のほとんどをどのように管理するかです。子プロセスでは、ライフサイクルメソッドを使って変更を監視します。 'componentWillReceiveProps(nextProps) '。何か 'のような場合は(this.props.showing!= nextProps.showing)runFunctionThatOccursWhenShowingChanges();' –

+0

ああ、完璧です、あなたは本当にトラビスありがとうございます。 –

関連する問題