没有真正得到 useReducer 钩子

Not really getting the useReducer hook

我正在尝试更改 select 菜单中的值。我的代码正在运行,但我认为如果我使用 useReducer.Am 会更好吗?我更正了?我试图改变它,但我似乎无法让它工作......在文档中它说:

"useReducer is usually preferable to useState when you have complex state logic that involves multiple sub-values or when the next state depends on the previous one."

我想我应该使用它吧?

 const [diametro, setDiametro] = useState(0);
 const [total, setTotal] = useState("0");
 useEffect(
     () => setTotal(() => ((preco / 100) * diametro).toFixed(2).replace(".", ",")), [diametro]
      );

我认为 useMemo 是适合您的情况的正确挂钩。基本上,你从 diametro 的当前值 'deriving' 得到 total 的值。这意味着 total 的值仅在 diametro 的值发生变化时发生变化。

代码将如下所示:

const [diametro, setDiametro] = useState(0);
const total = useMemo(() =>
  ((preco / 100) * diametro).toFixed(2).replace(".", ","),
  [diametro]
);

一般来说,一个指导原则是将实际状态保持在最低限度,然后使用像 useMemo 这样的钩子来派生你需要的其他属性。请记住,将 return 多个属性作为一个对象从 useMemo 也是可以的,因此您可以仅通过一次 useMemo 调用来派生多个值。