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

问题描述 投票:2回答:1

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

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

reactjs redux react-intl
1个回答
2
投票

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

但是你可以使用比在reducer中更好的动作。

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

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

谢谢

锅管

© www.soinside.com 2019 - 2024. All rights reserved.