Redux - 外部库和reducer中的“React”?

时间:2017-12-21 09:17:59

标签: reactjs redux react-intl

我有简单的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是一种反模式,因为我能找到的所有减速器示例都非常干净和光滑,并且没有任何外部库。

我是对还是我错了,我的代码完全没问题?

1 个答案:

答案 0 :(得分:2)

你不应该在reducer中进行任何类型的计算。它应该改变状态而不是别的。你使用它的方式是一个完整的反模式。因为它正在做一些UI动作。而Redux与UI无关。它应该用作商店而只能用作商店。

但您可以使用操作,这比在reducer中更好。

实现目标的最佳方法是使用reducer将消息推送到redux存储中的数组中。并创建一个使用该messages数组的Container来显示成功或错误消息。并创建一个计时器,在一段时间后从数组中删除消息。

只要看看他们正在做的https://github.com/diegoddox/react-redux-toastr回购。

由于

Akhil P