【问题标题】:Why are useState variables `const` in react?为什么useState变量`const`在反应?
【发布时间】:2020-04-11 05:39:14
【问题描述】:

我的理解是,在使用useState()时,我们应该这样声明数组:

const [someBooleanValue, setSomeBooleanValue] = useState(false)

代替

let [someBooleanValue, setSomeBooleanValue] = useState(false)

通常,const 用于不会改变的变量。在这里,someBooleanValue 将发生变化。在这种情况下,发生了什么让我们可以使用 const 关键字?

【问题讨论】:

  • 因为 useState 是不可变的。在这种情况下,他们使用 const 因为这是数组破坏而不是定义变量。
  • const 用于未重新分配的变量。这禁止您手动为 someBooleanValue 分配值。
  • @Satif 虽然是数组解构,但还是在定义变量。
  • 变量没有改变。每次状态更改时,react 都会重新渲染组件,这是一个新的函数调用,并且您的 consts 正在被重新声明。 React 会跟踪下一次声明它们时的值应该是什么,这会导致对 const 变化的混淆。
  • 这能回答你的问题吗? Why React Hook useState uses const and not let

标签: javascript reactjs ecmascript-6


【解决方案1】:

在带有功能组件的React Hooks 中,每次调用功能组件时,您的代码都会获得一个状态值。 React 单独处理存储,并在每次执行代码时通过 useState 返回当前值,提供最新的状态值。

来自文档:

我们声明一个名为 count 的状态变量,并将其设置为 0。React 会在重新渲染之间记住它的当前值,并为我们的函数提供最新的值。如果我们想更新当前计数,我们可以调用 setCount。

所以在这种情况下,我们使用const,因为在我们的代码中永远不应该重新分配该值。

【讨论】:

    【解决方案2】:
    const [someBooleanValue, setSomeBooleanValue] = useState(false)
    

    其实是这样的

    const handleState = useState(false)
    

    handleState[0]someBooleanValuehandleState[1]setSomeBooleanValue

    这个handleState是一个数组,是一个引用类型。 handleState 只是一个指向该数组的指针,这个指针实际上永远不会改变。

    someBooleanValuesetSomeBooleanValue 是索引 01 处的 handleState 数组的元素。

    所以,someBooleanValue 发生了变化,而不是指向包含它的数组的指针。

    希望这可以澄清!

    【讨论】:

    • 不,这并不完全等同,因为可以分配给handleState.someBooleanValue。这与数组解构的用法不同。
    • 这就是为什么我使用“类似这样的东西”只是为了便于解释:(但我明白了你的意思,谢谢指正!
    • 使用解构时它不是指向数组的指针someBooleanValue 也不会改变,这就是它在声明为 const 时起作用的原因。
    • 是的,我意识到我对此的理解是完全错误的。至少我现在知道了:)
    猜你喜欢
    • 2020-04-11
    • 2021-08-30
    • 2019-08-08
    • 1970-01-01
    • 2020-03-10
    • 2021-11-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多