第一个这样的问题!希望我做得对.

问题是,当我在浏览器(Chrome)中的事件处理程序的调试器中时,为什么事件处理程序未使用的useState变量不可用?

例如,在调试器中,testBoolean不可用.(在"观看"选项卡中,显示<not available>,在控制台中,显示Uncaught ReferenceError: testBoolean is not defined).

如果我注释掉console.log行,count变量也变得不可用.

import { useState } from 'react';
import Game from './Game';

export default function App() {
    const [testBoolean, setTestBoolean] = useState(true);
    const [count, setCount] = useState(0);

    const handleClick = () => {
        setCount(c => c + 1);
        console.log(count);
        debugger
    }

    return (
        <div>
            <button onClick={handleClick}>Clicked {count} times</button>
        </div>
    )
}

我try 过搜索例如react debugger unused useState variables not available in event handler个,但我发现的大多数线程都处理具有陈旧useState值的事件处理程序,这是一个完全不同的主题.一些 idea :

  • Click是一个箭头函数,所以我相信它应该关闭函数组件中的其他cons?
  • 当调用handleClick时,组件函数已经运行并返回虚拟多姆元素,因此useState变量应该已经声明.

期待任何见解,似乎对于理解事件流/ React至关重要,并且很乐意理解future 的发展.谢谢

推荐答案

现代网络浏览器进行了许多优化来提高性能.其中之一是他们可以确定一个变量是否需要一个变量.如果是这样,则必须在堆上分配该变量(以便在执行Close时它仍然存在).如果没有,可以在堆栈上分配它.由于您没有在闭合中使用该变量,因此浏览器决定将其放入堆栈中.因此,一旦App完成运行,该变量就会被释放.

对于正常的代码执行来说,这根本没有影响,因为只有在没有影响的情况下才会执行.但如果您暂停代码(使用debugger或断点),您会注意到该变量已被优化.

Javascript相关问答推荐

如何指定1条记录1个表?

如何分配类型脚本中具有不同/额外参数的函数类型

硬币兑换运行超时

React Code不在装载上渲染数据,但在渲染上工作

从WooCommerce Checkout Country字段重新排序国家,保持国家同步

Msgraph用户邀请自定义邮箱模板

自定义高图中的x轴标签序列

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

在服务器上放置了Create Reaction App Build之后的空白页面

获取Uint8ClampedArray中像素数组的宽度/高度

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

在使用REACT更改了CSS类之后,无法更改CSS样式

Puppeteer上每页的useProxy返回的不是函数/构造函数

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

为什么在函数中添加粒子的速率大于删除粒子的速率?

P5.js中矩形内的圆弧

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

从异步操作返回对象

需要RTK-在ReactJS中查询多个组件的Mutations 数据

正则表达式以确定给定文本是否不只包含邮箱字符串