我想在我的React應用程序的不同組件中打開一個Modal,例如'用戶登錄的模式'。例如:我想從A.js
,B.js
和C.js
打開模式。所以我做了一個新組件ModalWindow.js
它包含模態,我將它導入A.js
,B.js
和C.js
。反應js:打開不同組件的相同模態
現在的問題是,我必須保持狀態showModal: false
在所有3個組件中顯示/隱藏。無論如何,我必須保持單一的狀態。
一種方法是我在父組件中維護狀態。但是有沒有更好的方法可行?
X.js
import A from 'A.js'
import B from 'B.js'
import C from 'C.js'
class X extends Component {
return(
render{
<div>
<A />
<B />
<C />
</div>
}
)
}
export default X
A.js
import ModalWindow from 'ModalWindow.js'
class A extends Component {
constructor(props) {
super(props);
this.state = {
showModal: false
};
}
return(
render{
<ModalWindow show={this.state.showModal} container={this}/>
}
)
}
export default A
B.js
import ModalWindow from 'ModalWindow.js'
class B extends Component {
constructor(props) {
super(props);
this.state = {
showModal: false
};
}
return(
render{
<ModalWindow show={this.state.showModal} container={this}/>
}
)
}
export default B
C.js
import ModalWindow from 'ModalWindow.js'
class C extends Component {
constructor(props) {
super(props);
this.state = {
showModal: false
};
}
return(
render{
<ModalWindow show={this.state.showModal} container={this}/>
}
)
}
export default C
ModalWindow.js
import Modal from 'Bootstrap/Modal'
class ModalWindow extends Component {
return(
render{
<Modal
show={this.props.showModal}
container={this.props.container}
bsSize='small'
>
<Modal.Header closeButton="true">
<Modal.Title id="contained-modal-title">
Login
</Modal.Title>
</Modal.Header>
<Modal.Body>
Login Here
</Modal.Body>
</Modal>
}
)
}
export default ModalWindow
如果您使用Redux,您可以在Redux存儲中保存狀態,然後在子組件中分派操作以顯示它 - 但我不建議僅爲此目的實施Redux。 –
我已經使用了redux。 – iamsaksham
我採取的一種常用方法是保持一個「顯示」減速器,它可以處理各種顯示狀態。然後我有一個動作,它接收一條消息,顯示消息的模態。然後在模式本身,我可能會有一個按鈕,onClick,觸發一個隱藏模式的動作。 –