【问题标题】:Why react does not show updated value even if state changes?为什么即使状态发生变化,反应也不显示更新的值?
【发布时间】:2021-12-16 19:52:21
【问题描述】:

我只是在试验 ReactJS 并遇到了一个问题。我只想根据 BootstrapSwitchButton 的值更新一个变量。经过一段时间的调试,我得出一个结论,即变量正在根据需要进行更新,但并未显示在反应渲染部分中,而是显示了函数的更新值。 我的代码是:

  const [state, setState] = useState(false);
  let btnValue;
  
  function changeValue(value)
  {
    console.log("Value: " + value)
    btnValue = value;
    setState(value); 
    console.log("Button Value at function: " + btnValue)
  }
  return (
    <div className="App">
      <BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
    {console.log("Button Value: " + btnValue)}
    </div>
  );
}

我只想知道这里发生了什么?为什么即使状态发生变化,react 也不会显示更新的值?

【问题讨论】:

    标签: reactjs variables react-bootstrap setstate


    【解决方案1】:

    您不应该在组件上下文中使用局部变量,因为它们不在状态生命周期内。 React 不知道这个变量,因此不会“跟踪”它。使用 state 而不是 btnValue,因为这样 react 将处理与组件更改相关的任何操作。您可以在 react state and lifecycle page 中阅读更多相关信息。

    function changeValue(value)
      {
        console.log("Value: " + value)
        setState(value); 
        console.log("Button Value at function: " + value)
      }
    return (
        <div className="App">
          <BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
        {console.log("Button Value: " + state)}
        </div>
      );
    

    【讨论】:

    • 是的! React 渲染是异步的,因此该线程中的值不会被更新。谢谢。 :)
    • 我认为这与状态更新是异步的关系不大,而是仅在状态更新时重新渲染触发。将btnValue 更改为另一个值不会触发有关组件生命周期的任何更新,即不会重新渲染。
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2017-03-25
    • 2022-01-08
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多