当前位置: 首页 > news >正文

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾:
在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态地展示内容。如果我们想让页面能“动”起来,比如点击一个按钮后,页面上的数字会发生变化,该怎么做呢?

欢迎来到React学习的第二站!

今天,我们要揭开React世界里最神奇的魔法——State (状态)

什么是State?
简单来说,State就是组件自己内部存储和管理的数据。

想象一下,一个电灯开关,它有两种“状态”:开和关。一个计数器,它的“状态”就是当前的数字。在React中,当一个组件的State发生变化时,React会自动地、高效地重新渲染这个组件,让UI界面更新以反映最新的State。

这就是React的核心思想:你只需要关心如何改变数据 (State),而不用关心如何操作DOM来更新页面。 React会帮你搞定一切。

而要使用State,我们就需要认识一个React提供的工具,它叫做 useState


什么是 useState Hook?

useState 是React提供的一个内置函数,我们称之为 Hook。Hook可以让你在函数组件里“钩入”React的特性,比如State。

useState 的作用就是:为你的组件添加一个State变量。

实战:创建一个简单的计数器

理论总是枯燥的,让我们通过一个最经典的“计数器”案例,来亲手体验一下 useState 的威力。

第一步:清空并准备 App.jsx

打开我们上一章创建的项目,找到 src/App.jsx 文件。先把它里面的代码清空,替换成下面这个基础结构:

import './App.css'; // 我们暂时保留样式文件function App() {return (<div>{/* 我们将在这里编写计数器代码 */}</div>);
}export default App;

第二步:引入 useState

要想使用 useState,我们必须先从 react 库中把它“请”出来。修改第一行代码:

import { useState } from 'react'; // 从 'react' 导入 useState
import './App.css';

第三步:使用 useState 创建State变量

现在,在 App 函数的内部,return 语句的上面,添加下面这行代码:

function App() {const [count, setCount] = useState(0); // <-- 添加这一行return (// ...);
}

这行代码就是使用useState的精髓,让我们来把它拆解开:

  • useState(0): 我们调用useState函数,并传入一个参数 0。这个 0 就是我们这个State变量的初始值。也就是说,计数器一开始是从0开始的。
  • const [count, setCount] = ...: useState会返回一个包含两个元素的数组。我们使用了JavaScript的数组解构赋值语法,把这两个元素分别赋值给了两个变量:
    1. count: 这就是我们的State变量。它的值就是当前的状态(在这里就是当前的计数值)。我们可以在JSX中直接使用它来显示。
    2. setCount: 这是专门用来更新count值的函数。记住一个铁律:你永远不能直接修改State变量(比如 count = count + 1 是绝对禁止的!),你必须通过这个更新函数来改变它。

第四步:在页面上显示State

现在我们有了count这个State变量,让我们把它显示在页面上。修改return部分的代码:

function App() {const [count, setCount] = useState(0);return (<div><h1>计数器</h1><p>当前的计数值是: {count}</p></div>);
}

保存文件,看看浏览器,页面上是不是已经显示出“当前的计数值是: 0”了?

第五步:创建按钮,并通过更新函数改变State

最后,也是最关键的一步,我们要创建一个按钮,每次点击它时,就调用setCount函数来增加count的值。

继续修改return部分的代码:

function App() {const [count, setCount] = useState(0);// 定义一个事件处理函数const handleIncrease = () => {// 调用更新函数来改变 statesetCount(count + 1); };return (<div><h1>计数器</h1><p>当前的计数值是: {count}</p><button onClick={handleIncrease}>点我 +1</button></div>);
}

代码解释:

  1. 我们创建了一个 <button>
  2. 给这个按钮添加了一个 onClick 事件。当按钮被点击时,它会调用我们定义的 handleIncrease 函数。
  3. handleIncrease 函数内部,我们调用了 setCount(count + 1)。这行代码告诉React:“请把count这个State的值更新为它当前的值加1”。

现在,保存文件,回到浏览器,疯狂点击那个“点我 +1”按钮吧!

你会看到,每点一次,页面上的数字就会自动增加。我们没有写任何一行DOM操作代码,只是调用了setCount,React就帮我们把页面更新好了。这就是State的魔力!


总结与思考

今天,我们掌握了React中最核心的概念,这是你从静态页面走向动态交互应用的关键一步。让我们回顾一下:

  1. State是什么? 它是组件内部的数据,当它改变时,UI会自动更新。
  2. useState是什么? 它是React提供的一个Hook,用来在函数组件中添加和管理State。
  3. 如何使用useState
    • 通过 import { useState } from 'react' 引入。
    • 调用 const [state变量, 更新函数] = useState(初始值) 来创建。
    • 在JSX中使用 {state变量} 来显示数据。
    • 在事件处理函数中调用 更新函数(新值) 来改变数据。
  4. 铁律: 永远不要直接修改State变量,必须使用它对应的更新函数。

我们现在已经能让一个组件自己管理自己的数据了。但是,如果一个组件需要从它的“父亲”那里获取数据呢?比如,一个UserProfile组件,需要从App组件那里接收用户名和头像地址。

在下一篇文章 《React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?》 中,我们将学习另一个核心概念——Props,掌握组件之间最基本的沟通方式。我们下期不见不散!

相关文章:

  • 大模型智能体核心技术:CoT与ReAct深度解析
  • 操作系统的概念,功能和目标
  • React入门第一步:如何用Vite创建你的第一个React项目?
  • 深入理解 React 样式方案
  • 机器学习监督学习实战六:五种算法对新闻组英文文档进行文本分类(20类),词频统计和TF-IDF 转换特征提取方法理论和对比解析
  • RAG 文档解析难点1:多栏布局的 PDF 如何解析
  • 关于我对各开发语言的看法与接下来的文章内容
  • Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
  • 2025年登高架设作业考试题库精选
  • uniapp 实现腾讯云IM群文件上传下载功能
  • 智能门锁申请 EN 18031 欧盟网络安全认证指南​
  • AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
  • 边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
  • 云原生安全实战:API网关Envoy的鉴权与限流详解
  • 详解快排的四种方式
  • 1.6 http模块nodejs 对比 go
  • CocosCreator 之 JavaScript/TypeScript和Java的相互交互
  • 篇章十 数据结构——排序
  • “冒个泡泡”,排个序呗~:C语言版冒泡排序全解
  • Linux命令cat /proc/net/snmp查看网络协议层面统计信息
  • 网站建设创业计划书模板范文/何鹏seo
  • 做bt网站安全不/关键词搜索排行榜
  • 公司做网站需要多少钱/北京百度搜索排名优化
  • 网站建设需要什么手续/友情链接导航
  • 秦皇岛市 网站建设/淘宝seo是指什么
  • 欧美简约风格网站设计/免费自助建站平台