我希望状态会在道具更改时重新加载,但这不起作用,并且 user
变量不会在下一次更新 useState
调用,有什么问题?
function Avatar(props) {
const [user, setUser] = React.useState({...props.user});
return user.avatar ?
(<img src={user.avatar}/>)
: (<p>Loading...</p>);
}
原文由 vitalyster 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已经看到这个问题的几乎所有答案都在宣传一个不好的模式: 由于
useEffect
调用中的 道具更改 而更新状态。useEffect
钩子用于将您的 React 组件与外部系统同步。使用它来同步 React 状态 可能会导致错误(因为由其他效果引起的重新渲染可能会导致意外的状态更新)。更好的解决方案是触发与key
来自其父组件的<Avatar />
组件中的道具更改的 和解:在这种情况下,您可以将
key
视为 useEffect 的依赖数组,但您不会因为组件触发的意外useEffect
调用而触发意外的状态更改呈现。您可以在此处阅读有关此内容的更多信息: Puting Props To State
还有更多关于
useEffect
可能是脚枪的信息,在这里:你可能不需要效果