有人知道在使用react-redux中的connect函数时,如何用React.memo包装React组件吗?
例如,您将如何修改以下内容?
let Button = (props: Props) => (
<button onClick={props.click}>{props.value}</button>
);
Button = connect(
mapStateToProps,
mapDispatchToProps
)(Button);我试过了:
let Button = React.memo((props: Props) => (
<button onClick={props.click}>{props.value}</button>
));
Button = connect(
mapStateToProps,
mapDispatchToProps
)(Button);但是,connect返回的函数需要传递一个组件,因此它会出现以下错误:
未捕获错误:必须将组件传递给connect返回的函数。而是收到{"compare":null}
发布于 2018-10-29 17:22:30
这里也有同样的问题。已通过将react-redux升级到版本5.1.0修复。
发布于 2018-10-26 22:27:56
React.memo只是一个即席程序,所以您可以只使用:
不带备忘录的:
connect(
mapStateToProps,
mapDispatchToProps
)(Button);带备忘录的:
connect(
mapStateToProps,
mapDispatchToProps
)(React.memo(Button));甚至包装以连接:(这应该是使用连接的解决方案)
React.memo(
connect(
mapStateToProps,
mapDispatchToProps
)(Button)
);就像我们对withRouter做的那样:withRouter(connect(...)())
发布于 2018-10-27 00:42:22
您的解决方案应该可以工作(我没有尝试像那样复制-粘贴),但是您还必须将react-redux更新到最新版本。
顺便说一句,我认为在许多HOC中React.memo的正确实现应该是最接近组件本身的:React.memo的目标是检查组件收到的所有新属性是否都与上一个属性相同。如果任何HOC转换或添加任何道具到组件- connect通过将Redux存储映射到道具来做到这一点,React.memo应该知道这一点,以便决定是否更新组件。
所以我会选择这样的东西:
//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);https://stackoverflow.com/questions/52998469
复制相似问题