模态和通知是附加到正文的组件。因此它们的工作方式与普通组件几乎没有什么不同。在我的应用程序中,我可以想到两种实现它们的方法,但我不确定哪一种更好。
- 没有商店
在这种方法中,我创建了一个具有 create 方法的 NotificationHelper 类。在其中,我创建了一个新的容器节点,将其附加到主体,然后调用 React.render(, container);
所以任何组件都可以调用 NotificationHelper.create() 并且它会创建一个通知。管理其生命周期并在计时器到期或有人单击关闭按钮时关闭的通知组件。
问题经常是,我需要在页面上显示通知以响应 XHR 响应(成功或失败),所以在我的 actionCreator 中,我会有这样的代码
APIManager.post(url, postData).then(function(response) {
NotificationHelper.create(<SuccessNotification />)
});
我不知道从呈现新组件的动作创建者中调用这样的东西是否正确。
- 有店铺
另一种方法是创建 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/>
});
这种方法的问题是商店的额外开销。商店在这里没有做任何有意义的事情,它只是为了跟随潮流。从动作创建者,我们将数据传递给存储,组件再次从存储中获取相同的数据并渲染它。因此,我们完成了通量周期,却没有真正从中得到任何东西。
此外,我现在需要在我的应用程序开始时初始化 NotificationContainer,即使此时我没有任何通知。