为什么React Hook useState使用const而不是让

时间:2019-11-14 15:12:39

标签: javascript reactjs ecmascript-6 react-hooks

使用React的useState Hook的标准方法如下:

const [count, setCount] = useState(0);

不过,显然const count变量将被重新分配给其他原始值。

为什么变量没有定义为let count

4 个答案:

答案 0 :(得分:42)

  

显然要重新分配给其他原始值

不是。重新呈现组件后,该函数将再次执行,创建一个新的作用域,并创建一个新的<!-- final var --> <module name="LocalFinalVariableName"> <property name="format" value="^[A-Z0-9][A-Z0-9\_]*$" /> <message key="name.invalidPattern" value="violation is final." /> </module> <module name="MemberName"> <property name="format" value="^[m][A-Z][a-zA-Z0-9]*$" /> <message key="name.invalidPattern" value="violation is member." /> </module> 变量,该变量与先前的变量无关。

示例:

count

注意:钩子要复杂得多,实际上并没有这样实现。这只是为了证明类似的行为。

答案 1 :(得分:2)

const可以防止在同一范围内重新分配引用的值。

来自MDN

  

这并不意味着它拥有的值是不可变的,只是不能重新分配变量标识符。

  

常量不能与相同范围内的函数或变量共享其名称。

答案 2 :(得分:1)

  

在调用setCount之后,将重新呈现组件,并重新调用   useState返回新值。关键是计数是不变的。   所以这里没有错字。

从技术上讲,它是每个渲染的新变量。

来源:React Github issue: Docs - Hooks: is that const a typo ?

答案 3 :(得分:1)

在这里我发现const令人沮丧,因为count需要更改,所以

  let [count, setCount] = useState(0)
  // simply can't use ++ on either side of count increment given we declare as const [count, setCount] 
  // instead declaration of var or let [count, setCount] allows simpler code
  const increment = () => {
    setCount(count++); //const cannot do this only let or var
  };