为什么不直接从 Action Creator Redux 调度到 store 呢?

xer*_*ant 5 reactjs redux redux-thunk react-redux

我正在使用 redux 和 react-native 构建一个应用程序。

我对我使用的模式很好奇。我没有遇到任何缺点,但是我没有在任何教程中看到它,这让我想知道为什么没有人这样做。

而不是将动作创建者作为连接函数中的道具传递,例如

 connect(mapStateToProps,{ func1, func2 })(Component);
Run Code Online (Sandbox Code Playgroud)

我将应用程序商店导入到模块内部,我首先在其中声明了函数:

import { AppStore } from '../App';
const actionCreator = () => {
   doSomethng();
   appStore.dispatch({ type: 'Action' });
};
Run Code Online (Sandbox Code Playgroud)

对我来说,这使得执行异步操作变得更容易,因为我不需要中间件:

import { AppStore } from '../App';
const actionCreator = async () => {
   await doSomethng();
   appStore.dispatch({ type: 'Action' });
};
Run Code Online (Sandbox Code Playgroud)

我这样做是因为 js-lint 错误'no-shadow'。它让我意识到,为了使用它,我必须在组件文件中导入动作创建者,然后将其作为 prop 传递给 connect 函数,以便动作创建者能够访问调度。

import { actionCreator1, actionCreator2 } from './actionCreators';

const myComponent = (props) => {
   const { actionCreator1, actionCreator2 } = props; //shadowed names
   return (
      <Button onPress={actionCreator1} />
   );
};

export default connect({}, { actionCreator1, actionCreator2 })(myComponent)
Run Code Online (Sandbox Code Playgroud)

在我的版本中,我只导入一次,但不将其传递给连接。这消除了影子名称的需要。

import { actionCreator1, actionCreator2 } from './actionCreators';

const myComponent = (props) => {
   return (
      <Button onPress={actionCreator1} />
   );
};

export default connect({})(myComponent)
Run Code Online (Sandbox Code Playgroud)

Jor*_*lyn 1

我喜欢你尝试为自己的具体问题找到自己的解决方案。这是工程师的标志,只是在这种情况下这不是解决方案。

我认为 Redux 如何教你做事的想法并不是为了被经典化。您可以在道具上放置调度程序,因为它允许事物透明,这意味着事物被绑定在您的类之外并注入。您通过在其他一些文件中直接引用它来隐藏您的存储依赖项。您的应用程序在工作流程方面的工作方式不再那么明显。另一个反应开发人员会感到困惑,我认为这是主要的缺点。

如果您对这些方面感到满意,那么您所做的事情就很好。很好,它完成了工作,但不是“很好”,因为它包含单一责任原则等概念