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