我有简单的Redux reducer,但是对于某些动作我需要显示通知,为了这样做,我需要在reducer中触发我的自定义通知功能,所以:
case REDUCER_ACTION_NAME:
notificationDisplay.success("Message", {
additionalStuff: extraOptions
});
更糟糕的是我正在使用react-intl
进行翻译,我需要将"Message"
o翻译好,所以我将其添加到组合中:
case REDUCER_ACTION_NAME:
notificationDisplay.success(<FormattedMessage id="message" defaultMessage="Message" />, {
additionalStuff: extraOptions
});
它创建了一个跨度翻译并需要react
所以我的reducer从这些导入开始:
import React from 'react';
import notificationDisplay from 'my-notifications';
import { FormattedMessage } from 'react-intl';
import {
// all the actions
} from './actions.jsx';
// reducer
好吗?我觉得这里的东西是关闭的 - 比如在减速器中导入React
是一种反模式,因为我能找到的所有减速器示例都非常干净和光滑,并且没有任何外部库。
我是对还是我错了,我的代码完全没问题?
你不应该在reducer中做任何类型的计算。它应该改变状态而不是别的。你使用它的方式是一个完整的反模式。因为它正在做一些UI动作。而Redux与UI无关。它应该用作商店而只能用于商店。
但是你可以使用比在reducer中更好的动作。
实现目标的最佳方法是使用reducer将消息推送到redux存储中的数组中。并创建一个使用该messages数组的Container来显示成功或错误消息。并创建一个计时器,在一段时间后从数组中删除消息。
只要看看他们正在做得很好的https://github.com/diegoddox/react-redux-toastr回购。
谢谢
锅管