【掌握React Hooks】useState与useEffect实战示例解析

作者:用户CBAP 更新时间:2025-05-29 10:15:16 阅读时间: 2分钟

引言

React Hooks 是 React 16.8 版本引入的新特性,它允许我们在函数组件中“钩子”使用类组件的特性,如状态管理、生命周期等。其中,useStateuseEffect 是两个最常用的 Hooks,本文将通过实战示例来解析它们的使用方法。

useState实战示例

useState 用于在函数组件中添加状态,它接受一个初始值作为参数,并返回一个包含当前状态值和更新状态值的数组。以下是一个简单的示例:

import React, { useState } from 'react';

function Counter() {
  // 声明一个名为 "count" 的状态变量,初始值为 0
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(count + 1)}>点击我</button>
    </div>
  );
}

export default Counter;

在上面的示例中,我们使用 useState 声明了一个名为 count 的状态变量,并将其初始值设置为 0。setCount 是一个用于更新 count 的函数。每次点击按钮时,setCount 会将 count 的值增加 1。

useState进阶

惰性初始化state

useState 会在组件的首次渲染时执行,并且在之后的渲染中不会重新执行。这意味着,useState 的初始化值会被设置为传入的初始值,而不是组件挂载时的值。

function Counter() {
  // 惰性初始化state
  const [count, setCount] = useState(() => {
    console.log('组件挂载');
    return 0;
  });

  return (
    <div>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(count + 1)}>点击我</button>
    </div>
  );
}

在上面的示例中,即使我们修改了 useState 的初始值,它也不会影响组件的渲染。

获取上一次的值

我们可以通过在 useState 的回调函数中传递一个函数来获取上一次的值。

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

  const increment = (prevCount) => {
    return prevCount + 1;
  };

  return (
    <div>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(increment(count))}>点击我</button>
    </div>
  );
}

在上面的示例中,我们定义了一个名为 increment 的函数,它接受上一次的值作为参数,并返回新的值。这样,我们就可以在更新状态时获取到上一次的值。

useEffect实战示例

useEffect 用于在函数组件中执行副作用操作,如数据请求、订阅事件等。它接受两个参数:一个回调函数和一个依赖数组。以下是一个简单的示例:

import React, { useState, useEffect } from 'react';

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

  useEffect(() => {
    console.log(`计数:${count}`);
  }, [count]); // 依赖数组为[count],仅在count变化时执行副作用

  return (
    <div>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(count + 1)}>点击我</button>
    </div>
  );
}

export default Counter;

在上面的示例中,我们使用 useEffect 来执行一个副作用操作:在 count 变化时,打印出当前的计数。依赖数组为 [count],这意味着只有当 count 发生变化时,副作用操作才会执行。

useEffect进阶

清理副作用

在某些情况下,我们可能需要在组件卸载时执行一些清理操作,例如取消订阅、清除定时器等。这时,我们可以使用 useEffect 的返回值来执行清理操作。

import React, { useState, useEffect } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  let timer;

  useEffect(() => {
    timer = setTimeout(() => {
      console.log(`计数:${count}`);
    }, 1000);
    return () => {
      clearTimeout(timer);
    };
  }, [count]); // 依赖数组为[count],仅在count变化时执行副作用

  return (
    <div>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(count + 1)}>点击我</button>
    </div>
  );
}

export default Counter;

在上面的示例中,我们使用 setTimeout 来模拟一个定时器,并在 useEffect 的返回值中清除定时器,以执行清理操作。

总结

本文通过实战示例解析了 useStateuseEffect 的使用方法。在实际开发中,合理使用这两个 Hooks 可以帮助我们更好地管理组件的状态和副作用,提高代码的可读性和可维护性。

大家都在看
发布时间:2024-12-11 11:11
2号线“纬一街”站,走雁南路向东,到“大唐芙蓉园”约公里。。
发布时间:2024-11-03 22:16
牛杂想要煮的好吃,还得要有好的配料和炖煮方式,这样炖煮出来的味道才会更好。基本上每个地方的牛杂味道都是不同的,这是因为使用的药香料有所不同。常见用于制作牛杂。
发布时间:2024-12-12 05:36
公交线路:地铁2号线 → 地铁1号线,全程约22.3公里1、从北京站乘坐地铁2号线,经过6站, 到达复兴门站2、步行约140米,换乘地铁1号线3、乘坐地铁1号线,经过10站, 到达古城站。
发布时间:2024-12-16 00:29
重庆一日游哪里好玩主城区景点: 购物商圈:解放碑、三峡广场、观音桥步行街、杨家坪步行街、南坪步行街 观光休闲:朝天门广场、南滨路、洪崖洞、一棵树、洋人街、山城步道、中央半岛温泉、海棠晓月温泉、白市驿天赐温泉、北温泉、南温泉 历史古迹:。
发布时间:2024-11-02 02:10
孕吐是孕妇发生妊娠反应的一种常见表现,而且很多孕妇在怀孕的时候都是会出现孕吐的。但是话说回来,并不是所有女人在怀孕的时候都是会出现孕吐的,这和每个人的身体素。
发布时间:2024-12-14 00:49
学姐飘过,学校是大中专都有的,你可以去www.cdtlgcxx.com去看看招生简章,不是分配,都版是单位来招聘,自己去应权聘的,男生念这个学校适合,女生的话,没有关系还是别去了,找工作据说巨难。工程、机械是国重专业哦。
发布时间:2024-11-02 07:51
贫血是在很多群体中都比较常见的一种现象。出现这种问题,多与人的体质以及饮食习惯不良有关。当然,对于贫血病人而言,在日常饮食中,是有很多需要注意的地方的,比如。
发布时间:2024-10-30 02:01
很多女性来月经的时候都是比较烦躁的,这不仅是因为月经会影响人们的情绪,也是因为来月经的时候往往会因为血量过多而出现月经血沾到床单上或者衣服上的现象。床垫上弄。
发布时间:2024-12-11 14:29
发布时间:2024-10-30 16:18
孩子的身高跟父母的遗传因素有很大的关系,如果父母的个子是比较矮的话,那么孩子的身高也就可能会比较矮一些。但是如果父母的身高比较高的话,那么孩子的身高也会比较。