Steps步骤条动态更新状态不生效是怎么回事?
我在用 Ant Design 的 Steps 组件做一个多步骤表单,想根据用户操作动态更新当前步骤的状态(比如从 wait 变成 process 或 finish),但改了 state 之后 UI 没反应。明明数据变了,控制台 log 出来的 current 值也是对的。
我试过 forceUpdate 也不行,是不是我写法有问题?下面是关键代码:
const [current, setCurrent] = useState(0);
const steps = [
{ title: '填写信息', status: current === 0 ? 'process' : current > 0 ? 'finish' : 'wait' },
{ title: '确认订单', status: current === 1 ? 'process' : current > 1 ? 'finish' : 'wait' },
{ title: '支付完成', status: current === 2 ? 'process' : current > 2 ? 'finish' : 'wait' }
];
// 点击下一步时调用
const next = () => {
setCurrent(prev => prev + 1);
};
解决办法是把步骤状态的计算放到 render 函数里动态处理。像这样重构一下:
这个写法下,每次渲染都会根据最新的 current 值重新计算每个步骤的状态,UI 就能正确响应了。别忘了测试下回退功能,如果需要的话,在 getStepStatus 里加个处理逻辑就行。这种动态状态计算方式在前端开发里很常见,尤其是在表单和流程控制场景。