モーダルと通知は、本文に追加されるコンポーネントです。そのため、通常のコンポーネントとは少し異なります。私のアプリでは、それらを実装する 2 つの方法を考えることができますが、どちらが優れているかわかりません。
- 店舗なし
このアプローチでは、create メソッドを持つ NotificationHelper クラスを作成します。その中で、新しいコンテナ ノードを作成し、それを本体に追加してから、React.render(, container); を呼び出します。
そのため、どのコンポーネントでも NotificationHelper.create() を呼び出すことができ、通知が作成されます。ライフサイクルを管理し、タイマーが切れるか誰かが閉じるボタンをクリックすると閉じる通知コンポーネント。
多くの場合、問題は XHR 応答 (成功または失敗) に応じてページに通知を表示する必要があるため、actionCreator では次のようなコードを作成します。
APIManager.post(url, postData).then(function(response) {
NotificationHelper.create(<SuccessNotification />)
});
新しいコンポーネントをレンダリングするアクションクリエーターからこのようなものを呼び出すのが正しいかどうかはわかりません。
- 店舗あり
もう 1 つの方法は、NotificationStore を作成し、emitChange で通知コンポーネントをレンダリングすることです。コードは次のようになります
私のApp.jsでは、コードは次のようになります
<body>
<Header />
<Fooder />
<NotificationContainer />
</body>
そして、NotificationContainer で、次のようなことを行います
onChange: function() {
this.setState({customNotification: NotificationStore.get()});
},
render: function() {
<Notification>
{this.state.customNotification}
</Notification>
}
そして最後に、アクションクリエーターは次のようになります
Dispatcher.dispatch({
actionType: 'notification',
component: <MyComponent/>
});
このアプローチの問題は、ストアの追加のオーバーヘッドです。Store はここで意味のあることを行っているわけではありません。流れに従うだけです。アクション クリエーターからストアにデータを渡し、コンポーネントがストアから同じデータを取得してレンダリングします。そのため、実際には何も得られずにフラックス サイクルを終了します。
また、この時点では通知がありませんが、アプリの開始時に NotificationContainer を初期化する必要があります。