私のReactアプリケーションのさまざまなコンポーネントから「ユーザーログインのモーダル」と言うモーダルを開きたいとします。例:私は、モーダルをA.js
、B.js
およびC.js
から開きたいです。そこで私はModalWindow.js
という新しいコンポーネントを作成しました。これにはA.js
、B.js
、C.js
にインポートされました。React js:異なるコンポーネントから同じモーダルを開く
問題は、Modalが表示/非表示にするすべての3つのコンポーネントで状態showModal: false
を維持する必要があることです。とにかく、私は単一の状態を維持しなければならないのですか?
1つの方法は、親コンポーネントに状態を維持することです。しかし、可能な方法はありますか?
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を実装することはお勧めしません。 –
私はすでにレフィックスを使用しています。 – iamsaksham
よく取る一般的なアプローチは、ディスプレイのさまざまな状態を処理する "ディスプレイ"レデューサーを保つことです。それから、私は、メッセージにモーダルを示すメッセージを取り込むアクションを持っています。その後、モーダル自体では、onClickがモーダルを隠すアクションを発生させるボタンを持つことがあります。 –