Redux的React.memo问题

时间:2020-09-29 15:19:58

标签: reactjs redux react-redux react-hooks react-memo

我有两个组成部分。

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);
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中最新的stateA。

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

2 个答案:

答案 0 :(得分:0)

如果Parent组件是功能组件,则可以这样使用

 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>

我希望它对您有用。

答案 1 :(得分:0)

您应该可以访问props.stateA没问题

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

因为您在handleClick中访问了父母的道具。因此,如果props.stateA过时,那么合理的结论是父母没有收到最新的道具。我们可以看到您如何更新道具/状态吗?