我有两个组件。
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来访问最新的Child。
有什么方法可以解决这个问题吗?
发布于 2020-09-29 23:36:14
如果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>我希望它能为你工作。
发布于 2020-09-29 23:52:40
您应该能够访问props.stateA,这不成问题
const handleClick = () => {
console.log(props.stateA);
};因为你在handleClick里访问父母的道具。因此,如果props.stateA是陈旧的,那么逻辑结论是父进程不会收到最新的道具。我们可以看看你是如何更新属性/状态的吗?
https://stackoverflow.com/questions/64122640
复制相似问题