首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux的React.memo问题

Redux的React.memo问题
EN

Stack Overflow用户
提问于 2020-09-29 23:19:58
回答 2查看 127关注 0票数 0

我有两个组件。

代码语言:javascript
复制
function Parent(props){

  const handleClick = () => {
   console.log(props.stateA);
  };

  return <div><Child text={stateB} handleClick={handleClick} /></div>
}

const mapStateToProps = (state) => {
  return {
    stateA: state.stateA // stateA will be changed somewhere else
    stateB: state.stateB
  }
};

export default connect(mapStateToProps)(Parent);
代码语言:javascript
复制
function Child(props) {
   return <div onClick={props.handleClick}>{props.text}</div>
}

export default React.memo(Child,(prev, next) => {
   return prev.text === next.text
});

我的问题是,当stateA在某个地方更改时,单击Child会记录上一个stateA。我无法访问最新的stateA。

你可以看到,我不想在stateA改变时重新渲染Child,它应该只在stateB改变时重新渲染。但我想在Parent中点击Child来访问最新的Child

有什么方法可以解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-29 23:36:14

如果Parent组件是一个功能组件,那么您可以像这样使用

代码语言:javascript
复制
 const [valueA, setValueA] = useState('')
 useEffect(() => {
      setValueA(props.stateA)
 },[props.stateA])

 console.log(valueA) // latest Value of stateA
 return <div><Child text={stateB} handleClick={handleClick} /></div>

我希望它能为你工作。

票数 0
EN

Stack Overflow用户

发布于 2020-09-29 23:52:40

您应该能够访问props.stateA,这不成问题

代码语言:javascript
复制
const handleClick = () => {
   console.log(props.stateA);
};

因为你在handleClick里访问父母的道具。因此,如果props.stateA是陈旧的,那么逻辑结论是父进程不会收到最新的道具。我们可以看看你是如何更新属性/状态的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64122640

复制
相关文章

相似问题

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