为什么不直接从 action creator redux 发送到 store?

Why not dispatch directly into store from action creator redux?

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

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

而不是像

那样在连接函数中将动作创建者作为道具传递
 connect(mapStateToProps,{ func1, func2 })(Component);

我在首先声明函数的模块中导入了应用程序商店:

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

这对我来说可以更轻松地执行异步操作,因为我不需要中间件:

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

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

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

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

export default connect({}, { actionCreator1, actionCreator2 })(myComponent)

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

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

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

export default connect({})(myComponent)

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

我认为 Redux 如何教你做事的想法并不打算被经典化。您可以在 props 上放置一个调度程序,因为它可以让事情变得透明,这意味着事情在您的 class 之外绑定并注入。您通过在其他一些文件中直接引用它来隐藏您的商店依赖性.您的应用程序在工作流方面的工作方式不再那么明显。另一个 React 开发人员会感到困惑,我想这是主要的缺点。

如果您对这些方面没有意见,那么您所做的就很好。很好,它完成了工作,但不是 "fine" 因为它包含 Single Responsibility Principle

这样的概念