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

日期:

最佳答案

引言

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 可能帮助我们更好地管理组件的状况跟反感化,进步代码的可读性跟可保护性。