在我的應用程序中,我有很多按鈕。點擊任何一個按鈕都會導致帶有一些控件(因此事件)的彈出窗口打開。React的單個popover組件
最初我想將popover組件放在每個按鈕組件中,但我並不需要它,因爲在每個時刻只顯示一個彈出窗口。
我真的被困在如何去做。我該如何處理popover的顯示和關閉?我應該把它放在哪裏?
p.s.我在項目中部分使用ReactJS。
在我的應用程序中,我有很多按鈕。點擊任何一個按鈕都會導致帶有一些控件(因此事件)的彈出窗口打開。React的單個popover組件
最初我想將popover組件放在每個按鈕組件中,但我並不需要它,因爲在每個時刻只顯示一個彈出窗口。
我真的被困在如何去做。我該如何處理popover的顯示和關閉?我應該把它放在哪裏?
p.s.我在項目中部分使用ReactJS。
您可以創建一個父組件,其中包含彈出窗口和所有按鈕。父組件具有指示彈出窗口的顯示屬性的狀態。
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>
);
}
}
但是如果我需要在應用程序的某個其他部分中具有相同行爲的單個按鈕,該怎麼辦?我將不得不爲此按鈕創建另一個「父」容器?因此,我必須記住用按鈕放置popover。是否有可能使這些事情變得更容易和分離?我的意思是每當我想使用這樣一個按鈕,我只是把它放在,忘記了添加popover的必要性。 – AlexWasHere
您可以在您的父類的子組件中呈現您的按鈕,並通過您的孩子傳遞onClick方法。如果你的按鈕不能是父組件的子組件,你應該尋找像MobX或Redux這樣的高級狀態處理程序。 –
把你的popover放在透明背景的全屏容器div裏面。容器div將阻止點擊按鈕,然後當點擊容器div時關閉彈出窗口。 Checkout [Material-UI popover](http://www.material-ui.com/#/components/popover) – Abhishek