You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不理解useReducer钩子适用场景,现有逻辑是否适合改用useReducer实现?

结论:你的场景不需要使用useReducer,现有实现已经够用,甚至还可以进一步简化

首先对应React官方给出的useReducer适用场景,你的需求两个适配条件都不满足:

  • 不存在包含多个子值的复杂状态逻辑:你目前只有diametro这一个用户可控的状态,total完全是由diametro和固定常量preco计算出来的派生值,没有独立的状态变更逻辑
  • 不存在下一个状态依赖之前状态的情况:total的计算完全不需要参考上一轮的total值,只需要当前的diametro就能算出结果

现有代码可优化点

你现在的写法里,total完全没必要单独声明为state,也不需要用useEffect监听更新,直接当做普通计算变量即可,代码可以简化为:

const [diametro, setDiametro] = useState(0);
// 直接计算即可,diametro变化时会自动重新计算得到新值
const total = ((preco / 100) * diametro).toFixed(2).replace(".", ",");

这种写法比你原来的写法少了一次额外的重渲染,逻辑也更直观。

改写useReducer报错的原因

你这个场景本身就不适合用useReducer,硬套的话反而需要额外写reducer函数、action类型匹配等冗余逻辑,平白增加出错概率,属于典型的过度设计。只有当你后续需求迭代,出现多个关联状态需要批量更新、状态变更逻辑复杂到散落在多个useEffect里不好维护的时候,再考虑换useReducer也不迟。

内容的提问来源于stack exchange,提问作者rafaelpadu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:57:02