React Hooks

本文介绍了ReactHooks的三大主要特性:useState用于管理状态,useEffect处理副作用操作,useRef存储和查找组件内的数据。文章详细讲解了每个Hook的用法、注意事项及常见应用场景,并提供了代码示例来帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视频课程

1. React Hook/Hooks是什么

  • Hook是React 16.8.0版本增加的新特性/新语法
  • 可以让你在函数组件中使用state以及其他的React特性

2. 三个常用的Hook

  • State Hook:React.useState()
  • Effect Hook:React.useEffect()
  • Ref Hook:React.useRef()

3. 注意事项

官方文档使用规则

  • hook 不能在类组件中使用。
  • 只能在函数最外层调用Hook,不要在循环、条件判断或者子函数中调用;
    在这里插入图片描述
  • 只能在React的函数组件中调用Hook,不要在其他Javascript函数中调用。

4. State Hook

  • State Hook让函数组件也可以有state状态,并进行状态数据的读写操作;
  • 语法: const [xxx, setXxx] = React.useState(initValue)
    • useState传入的initValue是当前state的初始值;
    • 在后续的重新渲染中,useState返回的第一个值将始终是更新后最新的state。
  • useState()说明:
    • 参数:第一次初始化指定的值在内部作缓存;
    • 返回值:包含2个元素的数组,第1个为内部当前状态值,第2个为更新状态的函数。
  • setXxx()的2种写法:
    • setXxx(newValue):参数为非函数值,直接指定新的状态值,内部用其覆盖原来的状态值;setCount(count+1)
    • setXxx(value => newValue):参数为函数,接收原本的状态值,返回新的状态值,内部用其覆盖原来的状态值。setCount(count => count+1)(完成的函数写法:setCount((count) => {return count+1}))
import React, { useEffect, useState } from "react";

function Counter() {
  // 声明一个新的叫做 “count” 的 state 变量
  const [count, setCount] = useState(0);
  const [name, setName] = useState('allen');

  useEffect(function updateTitle() {
    document.title = name + count;
  })

  const decrement = () => {
    if (count > 4) {
      return count - 1
    } else {
      return count
    }
  }

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>1
      </button>
      <button onClick={() => setCount(decrement)}>
        大于4后减1
      </button>
    </div>
  );
}

export default Counter
如果定义的初始数据是引用类型,更新的时候使用函数式更新结合扩展运算符(...)
  const [teacher, setTeacher] = useState({name: 'allen', age: 18});
  
  const chageName = () => {
    setTeacher(() => {
      return {
        ...teacher,
        name: 'kevin'
      }
    })
  }

  const chageAge = () => {
    setTeacher(() => {
      return {
        ...teacher,
        age: 20
      }
    })
  }

  <p>{teacher.name}</p>
  <button onClick={chageName}>改名</button>
  <p>{teacher.age}</p>
  <button onClick={chageAge}>改年龄</button>
  • useState惰性初始化
    initValue参数只会在组件的初始渲染中起作用,后续渲染时会被忽略。如果初始state需要通过复杂计算获得,则可以传入一个函数,在函数中计算并返回初始的state,此函数只在初始渲染时被调用。

5. Effect Hook

Effect Hook可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)。
useEffect()本身是一个函数,调用这个函数的时候,要传入一个函数。传入的这个函数,就相当于一个生命周期钩子。

  • useEffect(() => {})只传一个参数时,相当于监测所有值,只要组件中的值有改变,就运行传入的函数(组件挂载时也会执行)。
  • useEffect(() => {}, [])传入一个函数和一个[],相当于谁也不监测,只有组件挂载时才会执行传入的函数。
  • useEffect(() => {}, [value])传入一个函数和一个[value],相当于监测value,在组件挂载和value值改变时执行传入的函数。
  • useEffect(() => {... return () => {}}, [value])

语法和说明:
useEffect(() => {}

useEffect(() => {
	// 在此可以执行任何带副作用操作
	return () => { // 在组件卸载前执行
		// 在此做一些收尾工作,比如清除定时器/取消订阅等
	}
}, [stateValue])  // 如果指定的是[],回调函数只会在第一次render()后执行

可以把useEffect Hook 看作如下三个函数的组合:

  • componentDidMount()
  • componentDidUpdate()
  • componentWillUnmount()

6. RefHook

Ref Hook 可以在函数组件中存储/查找组件内的标签或任意其他数据
语法: const refContainer = useRef()
作用:保存标签对象,功能与React.createRef()一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值