首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过react-redux连接使用React.memo?

如何通过react-redux连接使用React.memo?
EN

Stack Overflow用户
提问于 2018-10-26 05:37:47
回答 4查看 19.7K关注 0票数 32

有人知道在使用react-redux中的connect函数时,如何用React.memo包装React组件吗?

例如,您将如何修改以下内容?

代码语言:javascript
复制
let Button = (props: Props) => (
  <button onClick={props.click}>{props.value}</button>
);

Button = connect(
  mapStateToProps,
  mapDispatchToProps
)(Button);

我试过了:

代码语言:javascript
复制
let Button = React.memo((props: Props) => (
  <button onClick={props.click}>{props.value}</button>
));

Button = connect(
  mapStateToProps,
  mapDispatchToProps
)(Button);

但是,connect返回的函数需要传递一个组件,因此它会出现以下错误:

未捕获错误:必须将组件传递给connect返回的函数。而是收到{"compare":null}

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-29 17:22:30

这里也有同样的问题。已通过将react-redux升级到版本5.1.0修复。

票数 6
EN

Stack Overflow用户

发布于 2018-10-26 22:27:56

React.memo只是一个即席程序,所以您可以只使用:

不带备忘录的

代码语言:javascript
复制
connect(
  mapStateToProps,
  mapDispatchToProps
)(Button);

带备忘录的

代码语言:javascript
复制
connect(
  mapStateToProps,
  mapDispatchToProps
)(React.memo(Button));

甚至包装以连接:(这应该是使用连接的解决方案)

代码语言:javascript
复制
React.memo(
  connect(
    mapStateToProps,
    mapDispatchToProps
  )(Button)
);

就像我们对withRouter做的那样:withRouter(connect(...)())

票数 19
EN

Stack Overflow用户

发布于 2018-10-27 00:42:22

您的解决方案应该可以工作(我没有尝试像那样复制-粘贴),但是您还必须将react-redux更新到最新版本。

顺便说一句,我认为在许多HOC中React.memo的正确实现应该是最接近组件本身的:React.memo的目标是检查组件收到的所有新属性是否都与上一个属性相同。如果任何HOC转换或添加任何道具到组件- connect通过将Redux存储映射到道具来做到这一点,React.memo应该知道这一点,以便决定是否更新组件。

所以我会选择这样的东西:

代码语言:javascript
复制
//import what you need to import

const Component = props => <div>{/* do what you need to do here */}</div>

export default compose(
  connect(mapStateToProps, dispatchToProps),
  /* any other HOC*/
  React.memo
)(Component);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52998469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档