讲师中心 微信公众号
AI工具推荐 视频效率加速

React useState钩子函数中,点击按钮多次后控制台输出为何不同?

落磊姑娘_8714

落磊姑娘_8714

发布时间:2025-03-11 12:25:05

|

1006人浏览过

|

来源于php中文网

原创

深入react函数组件usestate钩子及渲染机制

本文分析一段React代码,解释useState钩子函数在多次点击按钮后控制台输出差异的原因。代码的核心在于useState钩子和组件渲染机制。

代码片段如下:

function A() {
  console.log(2);
  return null;
}

const App: React.FC = () => {
  const [flag, setFlag] = useState(false);
  console.log(1);
  return (
    <div onClick={() => {
      console.log("click");
      setFlag(true);
    }}>
      click me
      <A />
    </div>
  );
};

第一次点击按钮,控制台输出"click 1 2"。这是因为点击事件触发,打印"click",setFlag(true)改变了flag状态。状态改变导致组件App重新渲染,console.log(1)再次执行,组件A也重新渲染,打印2。

第二次点击,控制台仅输出"click 1"。这并非因为newValue === prevValue,React的更新机制并非完全依赖此条件判断是否重新渲染。React内部机制复杂,包含一系列优化和比较,决定是否需要重新渲染。即使状态值未改变,组件也可能因其他原因重新渲染,例如useState内部机制或React的更新策略(特别是与eager state相关的优化策略)。因此,第二次打印console.log(1)并非因为flag状态改变,而是React更新机制导致App重新渲染。

jQuery点击事件遮罩弹出层可移动特效代码
jQuery点击事件遮罩弹出层可移动特效代码

"jQuery点击事件遮罩弹出层可移动特效代码下载。一款jquery弹出层插件制作注册表单点击按钮弹出层表单提交效果,可支持拖到的jQuery弹出层效果。标题、高度、宽度等可以自定义弹出层js插件。

下载

第三次及后续点击,控制台仅输出"click"。因为flag已为true,再次调用setFlag(true),newValue和prevState相等,React优化机制不会触发App重新渲染,console.log(1)不再执行,组件A也只在第一次渲染时执行。

理解React的更新机制和优化策略至关重要。深入研究React源码或相关文档能更好地理解细节。

React useState钩子函数中,点击按钮多次后控制台输出为何不同?

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

896

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

6643

2024.05.29

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

40

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

120

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

140

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

120

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

80

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React中文开发手册
React中文开发手册

共0课时 | 1人学习

React 路由精讲视频教程
React 路由精讲视频教程

共10课时 | 2.6万人学习

React.JS中文基础视频教程
React.JS中文基础视频教程

共14课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn