javascript - Redux - 在 React 组件的构造函数中使用 bindActionCreators 有什么缺点吗?
问题描述
我已经看到很多在bindActionCreators
函数中使用该函数的示例,mapDispatchToProps
如下所示:
...
const mapDispatchToProps = (dispatch, props) => ({
actions: bindActionCreators({
doSomething: somethingActions.doSomething,
}, dispatch)
});
export default connect(null, mapDispatchToProps)(SomeComponent);
这意味着每次存储更改时,此组件都会更新并重新执行将somethingActions.doSomething
动作创建者包装在dispatch
函数中并将其作为匿名函数返回。
像这样在构造函数中简单地执行一次不是更高效吗?
constructor(props) {
super(props);
const { dispatch } = props;
this.boundActionCreators = bindActionCreators({
doSomething: somethingActions.doSomething,
}, dispatch);
}
这样做有什么缺点吗?
解决方案
mapDispatchToProps
默认情况下,每个组件生命周期只使用一次 -请参阅 Redux GitHub 中的这个问题。它可以运行多次,理论上会导致性能问题。
可能引起麻烦的事情:
- 关注点的拆分 -
mapDispatchToProps
作为单独的函数传递给connect()
HOC 有助于未来的重构 - 很容易将连接移动到其他任何地方,扩展或完全删除它 - 无需单独更改组件。请参阅 Dan Abramov 的这篇关于 Presentational and Container Components的文章。在这种情况下,您的组件是 Presentational 并且connect()
+ 它mapDispatchToProps
是 Container。 - 代码可重复性 - 构造函数可能会变得非常冗长和混乱 - 想象一下必须使用
boundActionCreators
10 次。 - 使用
actions
- 在您的解决方案中,您需要将操作this.nameOfAction()
发送到 redux。但是对于获取数据,你会做this.props.nameOfDataProp
. 以相同的方式访问所有Redux
功能(又名 viaprops
)有助于可重复性和维护。 - 此外,性能提升将是可分割的 - 因为
mapDispatchToProps
仅在依赖于props
. 我鼓励您在您的应用程序中对此进行测试,看看您是否可以获得足够好的性能提升。
TL;DR:你可以获得一些小的性能提升,但在代码维护和可重复性方面需要付出很大的代价。
推荐阅读
- ios - 如何在视图(swift)中从网站查看 html?
- android - Android 11:如何/在哪里编写应该在卸载后仍然存在的混合媒体文件
- python - Django:带有参数化参数的原始 SQL 查询
- javascript - 图像未显示在动态生成的内容上
- python - 绘制 3d 图形时的问题
- c - Windows cmd & PowerShell 重定向到文件不起作用
- python - 替换最后一个冒号
- scala - 用于 val 函数中多态性的 Scala 语法
- spring-boot - 如何使用部署在pcf中的spring集成应用程序优化处理存储在S3存储桶中的大量文件?
- reactjs - Redux Saga takeLatest 不会取消之前的多个请求