【问题标题】:React setState doesn't update boolean variableReact setState 不更新布尔变量
【发布时间】:2021-05-15 16:32:29
【问题描述】:

我使用

创建了一个状态变量
const [drawing, setDrawing] = useState(false)

然后我有这个按钮应该更新drawing的值

 <button onClick={() => toggleDrawing}>Toggle Drawing</button>

toggleDrawing 函数是:

const toggleDrawing = () => {
    setDrawing(true)
  }

但是当我按下按钮和 console.log 时,drawing id 的值没有更新,它总是落后一步。它以false 的值开始,单击一次后仍为false,第二次单击后切换为true

【问题讨论】:

  • 你没有调用函数
  • 您的代码中的console.log 在哪里? setDrawing 异步运行也许这就是状态不更新的原因
  • 您的 onClick 返回函数而不是调用它。要么传递函数本身而不是匿名箭头函数,要么调用函数而不是/在返回时调用。

标签: reactjs react-hooks


【解决方案1】:
const [drawing, setDrawing] = useState(false)

案例:1 如果你想要一个切换 true=>false 和 false=>true

const toggleDrawing = () => {
    setDrawing(!drawing);
  }

<button onClick={toggleDrawing}>Toggle Drawing</button>

案例:2 如果你只想设置为真

 const toggleDrawing = () => {
    setDrawing(true);
  }

<button onClick={toggleDrawing}>Toggle Drawing</button>

沙盒https://codesandbox.io/s/vigilant-meadow-thdni?file=/src/App.js

注意 => 在 toggleDrawing 函数中的 console.log(drawing) 首先会返回 false,然后 true 原因是状态未更新

【讨论】:

  • 我做了你解释的同样的事情,但没有解决。这是我的完整代码:codesandbox.io/embed/…
  • 你不能在toggleDrawing函数中使用console.log,如果你在外面调用console.log,反应状态不会更新,会显示true
  • 我需要访问绘图变量并使用新的更新值在函数内部对其进行处理。
  • 你可以使用 useEffect 来实现它
  • 我会附加到 sanbox 等一下
【解决方案2】:

问题

你只是返回 toggleDrawing 函数而不执行它

解决方案

这样点击事件发生时执行函数

<button onClick={() => toggleDrawing()}>Toggle Drawing</button>

或者将toggleDrawing作为实际函数传递给onClick

<button onClick={toggleDrawing}>Toggle Drawing</button>

【讨论】:

【解决方案3】:
const toggleDrawing = () => {
    setDrawing((oldValue) => !oldValue)
  }

如果你想在 React 中切换状态,你总是想参考之前的状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多