Result组件动态状态显示不更新怎么办?
我在用Ant Design的Result组件做操作结果页时遇到问题,根据后端返回的状态码要显示成功/失败两种样式。按文档写了条件渲染逻辑,但页面始终显示初始状态,即使数据更新了也不变。
尝试过强制调用setState和用useEffect监听变量,但都没效果。代码大概是这样的:
const ResultPage = ({ statusCode }) => {
const [resultStatus, setResultStatus] = useState('success');
useEffect(() => {
if (statusCode === 400) {
setResultStatus('error'); // 这里没触发界面更新
}
}, []);
return (
);
};
明明状态码传进来了,Result组件就是不切换状态,控制台也没有报错,这是哪里出了问题啊?
你应该把 statusCode 加到依赖数组里,这样状态码变了才会重新判断:
另外建议直接用 props 计算,别搞多余 state,更高效:
这样零额外状态,性能更好,还少个 useState 的开销。
useEffect的依赖数组上。你现在写的是空数组[],这意味着这个副作用只会在组件首次渲染时执行一次,之后即使statusCode变化了,它也不会重新触发。所以页面自然不会更新。解决方法很简单,把
statusCode加到依赖数组里。这样每当statusCode发生变化时,useEffect就会重新执行,状态也会正确更新。完整的代码应该是这样的:
另外提醒一下,如果
statusCode是从父组件传下来的,并且有可能频繁变化,记得确认它的值是否真的在更新。有时候数据可能被缓存起来了,导致组件看起来没变化。最后,别忘了处理除了
400以外的其他状态码,不然可能会有边界情况漏掉。性能优化狂上线:这种小改动就能让界面响应更快,何乐不为?