Redux:将选择器导入到操作中?

beb*_*bbi 6 javascript ecmascript-6 reactjs redux react-redux

人们似乎一致认为,如果动作创建者需要状态信息(并且我们希望独立于状态形状),则调用该动作的组件应该向该动作提交所需的状态切片。请参阅此处Dan Abramov 的评论

但为什么我们不将选择器导入到操作中呢?

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

const myAction = () => (dispatch, getState) => {
  const requiredState = mySelector(getState());
  etc...
};
Run Code Online (Sandbox Code Playgroud)

看起来这至少会节省一些组件往返的状态切片并解耦事物。

这样做有什么坏处呢?(也许除了 actions 无法导出ActionTypes。)

mar*_*son 8

是的,如果您访问动作创建者、thunk 或 sagas 中的存储状态,那么您应该使用选择器函数来封装查找过程。

您问题的另一个方面是访问操作创建者中的商店状态是否是一个好主意丹对此有一些保留,我理解他的想法,但从我的角度来看,这很好。我写了一篇博文,讨论了关于使用 thunk、saga 和状态的一些常见问题,名为Idiomatic Redux: Thoughts on Thunks, Sagas, Abstraction, and Reusability,并给出了我认为这些问题通常不真实的原因需要担心的问题。