【问题标题】:associate a state with another state in useState hook在 useState 挂钩中将一个状态与另一个状态相关联
【发布时间】:2025-12-06 21:30:01
【问题描述】:

我想要一个状态 B,它的值依赖于状态 A,当状态 A 值更新时,状态 B 值随后更新。

问题正如@Atin Singh 在这里所说的changing multiple states in react js useState() hook

const [x, setX] = useState(0)
const [y, setY] = useState(x) // this is just to initialize an initial value to your state y so it will be once set to the value of x and then it doesn't depends on x//

状态 B 的值初始化为状态 A 的值,并且不依赖于状态 A 的值。

但是有没有办法让状态 B 的值依赖于状态 A 的值呢?

这是简化的代码:

export default function App() {
  const [a, setA] = useState("");
  const [b, setB] = useState(a);

  const updateA = () => {
    setA("Hi");
  };

  useEffect(() => {
    console.log("a: ", a);
    console.log("b: ", b);
  });

  return (
    <div className="App">
      <button onClick={updateA}>Update State A</button>
    </div>
  );
}

您可以从这里编辑代码: https://codesandbox.io/s/nifty-sun-ml843?fontsize=14&hidenavigation=1&theme=dark

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    您可以将 useEffect 与 Dependency 一起用作 [a]。添加这个块,所以当 a 得到更新时,这个 useEffect 将运行并设置 B 的值

       useEffect(() => {
            setB(a);
          },[a]);
    

    完整代码:

    import React, { useState, useEffect } from "react";
    import "./styles.css";
    
    export default function App() {
      const [a, setA] = useState("");
      const [b, setB] = useState(a);
    
      const updateA = () => {
        setA("Hi");
      };
    
      useEffect(() => {
        setB(a);
      },[a]);
    
      useEffect(() => {
        console.log("a: ", a);
        console.log("b: ", b);
      });
    
      return (
        <div className="App">
          <button onClick={updateA}>Update State A</button>
        </div>
      );
    }
    

    输出:

    a:  "" 
    b:  "" 
    a:  Hi 
    b:  "" 
    a:  Hi 
    b:  Hi 
    

    【讨论】:

    • 这不会导致循环吗?因为他需要两个状态随后更新。 B 更新 A,然后触发你的 deps 效果并更新 B,然后 B 更新 A 等等。
    • 没错,但每次状态 A 值发生变化时,它都会重新评估整个状态 B 值。比如让我们认为状态B = A + "World",我只想重新计算A部分。
    • 不,它不会进入循环,OP 希望 B 的状态依赖于 A,而不是两者都是明智的。在设置 a 的值后会额外调用这个 usestate
    最近更新 更多