Redux:将选择器导入动作?

时间:2017-06-09 07:21:04

标签: javascript reactjs ecmascript-6 redux react-redux

似乎一致认为,如果动作创建者需要状态信息(并且我们希望独立于状态),则调用动作的组件应该向动作提交所需的状态切片。参见例如丹·阿布拉莫夫的评论here

但为什么我们不改为将选择器导入动作?

import { mySelector } from '../reducers';

const myAction = () => (dispatch, getState) => {
  const requiredState = mySelector(getState());
  etc...
};

看起来这样可以节省至少一些状态切片通过组件进行往返并解除事物。

这样做的缺点是什么? (除非行动无法导出ActionTypes。)

2 个答案:

答案 0 :(得分:2)

是的,如果你 要在你的动作创建者,thunk或sagas中访问商店状态,那么你使用选择器函数来封装查找过程。

问题的另一个方面是如果在动作创建者中访问商店状态是个好主意。 Dan对此有所保留,我理解他的来源,但从我的观点来看,这很好。我写了一篇博客文章,讨论了关于使用thunk,sagas和状态Idiomatic Redux: Thoughts on Thunks, Sagas, Abstraction, and Reusability的一些常见问题,并说明了为什么我觉得这些担忧通常不是担心的真正问题。

答案 1 :(得分:1)

AFAIK你提到的评论中的想法是"解耦"你在州的行动。

将操作与应用程序状态分离,从调用操作的位置获取所需的数据,使操作不受限制。

通常解耦总是好事,有些好处:

  • 更易于维护代码和更改实施
  • 更简单的单元测试。
  • 减少对您行为的依赖。