尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

setState组件更新

setState组件更新
📅 发布时间:2026/7/11 23:13:23

setState -> 告诉React 状态变化 -> 需要重新渲染 -> 重新执行NameInput函数

import { useState } from "react"; function NameInput() { const [name, setName] = useState("") console.log(name) const [agreed, setAgreed] = useState(false) console.log(agreed) return ( <> <input value={name} onChange={(e) => setName(e.target.value)} /> <input type="checkbox" checked={agreed} onChange={(e) => setAgreed(e.target.checked)} /> </> ) } export default NameInput

原理很简单:console.log(agreed)写在组件函数体里,不是写在事件回调里。

React 组件本质就是一个函数,每次这个组件要重新渲染,React 就会重新调用这个函数一遍,函数体里的代码(包括console.log)都会重新执行一次。

点击 checkbox 的流程是:

  1. 触发onChange,调用setAgreed(e.target.checked)
  2. setAgreed是 state 更新函数,调用它会告诉 React:"这个组件的状态变了,需要重新渲染"
  3. React 重新执行NameInput()这个函数
  4. 函数体从头执行一遍,console.log(agreed)也就跟着执行一遍,打印出最新的agreed值

所以你点一次 checkbox,setAgreed触发一次重渲染,NameInput函数体整体跑一遍,console.log自然就打印一次。同理你打字改name的时候,console.log(name)也会跟着打印,因为setName也会触发重渲染。

这也是为什么之前提到的TodoApp里那个console.log在 StrictMode 下刷新会打印 2 次的原因是一样的:只要函数体被调用,里面所有同步代码都会执行,不只是 return 的 JSX。

相关新闻

  • Mininet 2.3.1 无控制器环境搭建:3步配置静态流表实现主机互通
  • Python 定时任务可靠性:Celery Beat + 数据库锁避免重复执行
  • Claude Fable 5延期发布:AI编程助手的技术突破与安全挑战

最新新闻

  • 仿 muduo 高并发服务器项目:实现 EventLoop,并将 TimerWheel 接入 Reactor 事件循环
  • L9958+PIC18F87K22电机驱动方案设计与优化
  • 2026 年 7 月新发布:金湖优秀的304屋面天沟厂家哪家专业,暴雨如注时,屋顶漏水成灾?换上这玩意儿能救命! - 实业推荐官【官方】
  • uos-squid-exporter常见问题解答:解决90%用户遇到的监控难题
  • 家校合作平台-springboot + vue
  • 胡寿松《自动控制原理》第6版:812考纲3阶段复习法,真题3刷冲刺120+

日新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号