2017-02-06 7 views
0

私のアプリではたくさんのボタンがあります。いずれかのボタンをクリックすると、いくつかのコントロール(したがってイベント)を開くポップオーバーが発生します。リアクションのシングルポップオーバーコンポーネント

最初はすべてのボタンコンポーネントにポップオーバーコンポーネントを配置したいと思っていましたが、実際には1つのポップオーバーだけが表示されるため、実際には必要ありません。

私は本当にそれをやる方法について固執しています。ポップオーバーの表示と終了を処理するにはどうすればよいですか?どこに置くべきですか?

p.s.私はプロジェクトでReactJSを部分的に使用します。

+0

透明な背景を持つフルスクリーンコンテナdivの内側にポップオーバーを配置します。コンテナdivはボタンのクリックをブロックし、コンテナdivをクリックするとポップオーバーを閉じます。チェックアウト[Material-UI popover](http://www.material-ui.com/#/components/popover) – Abhishek

答えて

0

親コンポーネントを作成し、ポップオーバーとすべてのボタンを含めることができます。親コンポーネントには、ポップオーバーの表示プロパティを示す状態があります。

class Parent extends Component { 
    constructor() { 
    this.state = { displayPopover: false }; 

    this.togglePopover = this.togglePopover.bind(this); 
    } 

    togglePopover() { 
    this.setState({ displayPopover: !this.state.displayPopover }); 
    } 

    render() { 
    return (
     <div> 
     <div style={{ display: this.state.displayPopover ? 'block' : 'none' }} /> 
     <button onClick={this.togglePopover}>Toggle 1</button> 
     <button onClick={this.togglePopover}>Toggle 2</button> 
     </div> 
    ); 
    } 
} 
+0

しかし、アプリの他の部分で同じ動作をするボタンが1つ必要な場合はどうすればよいですか?私はこのボタンのために別の '親 'コンテナを作成する必要がありますか?したがって、私はpopoverにボタンを付けることを忘れてはなりません。これらのことをより簡単に分けることは可能ですか?私はそのようなボタンを使用したいときはいつでも、それを

+0

親クラスの子コンポーネントにボタンをレンダリングし、子クラスを通してonClickメソッドを渡すことができます。ボタンが親コンポーネントの子ではない場合は、MobXやReduxなどの高度なステートハンドラを探す必要があります。 –

関連する問題