使用React-useState钩子的标准方法如下:

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

然而,这const count个变量显然将被重新分配到不同的原始值.

那么为什么变量没有定义为let count呢?

推荐答案

显然会被重新分配到不同的原始值

不是真的.当组件被重新加载时,函数会再次执行,创建一个新的作用域,创建一个新的count变量,这与之前的变量无关.

例子:

let _state;
let _initialized = false;
function useState(initialValue) {
  if (!_initialized) {
    _state = initialValue;
    _initialized = true;
  }
  return [_state, v => _state = v];
}

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

  console.log(count);
  setCount(count + 1);
}

Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender

Note:个钩子要复杂得多,实际上并不是这样实现的.这只是为了证明类似的行为.

Reactjs相关问答推荐

无法覆盖MUI工具栏上的左右填充,除非使用!重要

如何创建react router v6的自定义子路由?

当项目开始时,它不会从三元运算符(REACT)加载一些tailwind 类名称

自定义变量默认、聚焦和填充时所需TextField中标签的星号 colored颜色

onClick 事件处理程序未应用于样式组件

React Wordpress Apache 在索引之外重新加载 -> 未找到页面

Redux 工具包不更新状态

使用新数据更新时,React 不更新具有过滤功能的深层嵌套对象数组中的变量状态

为什么我的 Next.js (React) 组件只有在页面中时才有效?

React Native应用如何订阅Supabase的实时数据?

页面不显示

为什么接受 useState 返回的函数的 setter 在使用 React 的单个调用中执行两次?

未捕获的类型错误:useSelector 不是函数

自动重新获取不起作用 - RTK 查询

模块解析失败:意外令牌 (257:106) 您可能需要适当的加载程序来处理此文件类型

用 scss 覆盖 MUI

如何在react 日历中自定义带有圆形边框的日期项?

如何通过 Material Ui 设计将 Accordion 添加到您的 React 项目中?

将 set statehook 函数传递给子路由组件.解构错误

React LinkProps 的含义