React hooks之useEffect《类比Vue来记忆》(二)

文章详细介绍了React中useEffectHook的三种主要用法,包括不传参数时在每次渲染时执行,传空数组时仅在初次渲染时执行,以及传特定依赖时监听数据变化。同时强调了Hook的使用规则,并提供了完整示例代码,帮助读者理解如何在组件生命周期中管理副作用。

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

系列文章目录


⚠️注意 不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你的 React 函数的最顶层以及任何 return 之前调用他们。 遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样的顺序被调用。

⚠️注意 不要在普通的 JavaScript 函数中调用 Hook
你可以:
✅ 在 React 的函数组件中调用 Hook
✅ 在自定义 Hook 中调用其他 Hook


前言

提示:相比来讲,前面的useState的hooks语法,无疑是让React变得简单了起来。
useEffect这个Api也会在数据监听,第一次加载页面,页面渲染。起到了非常便捷的作用。


一、useEffect的三种形态

1.useEffect不传第二个参数

触发当前情况的场景如下:

代码如下:

  useEffect(() => {
          console.log('father组件重新渲染了');
     })

效果图如下:

在这里插入图片描述

2.useEffect第二个参数传 []

代码如下:

    //2. 传第二个参数([])
     useEffect(() => {
          console.log(num, state, '两个数据全都修改了');
     }, [])

效果图如下:

在这里插入图片描述

3.useEffect第二个参数传 [num]

代码如下:

  //3. 传第二个参数([num])
     useEffect(() => {
          console.log(num, 'num修改了');

     }, [num])

效果图如下:

初始值如下图:

在这里插入图片描述

点击修改num按钮后结果如下图:

在这里插入图片描述

点击修改state按钮(不会触发任何一个):

在这里插入图片描述

4.组件销毁

代码如下所示:

    useEffect(() => {
          return ()=>{
               console.log('组件销毁触发!!!');  
          }
     })

5.useEffect总结

三种传参总结如下:

1.useEffect不传第二个参数的用法:在组件每次更新的时候,想要进行的触发的操作.(当前组件的父组件发生更新,不传参数的useEffect也会触发)。是一个组件只要重新渲染就会触发的类型

2.useEffect第二个参数传 [] 的用法:在当前组件第一次渲染成功的时候执行一次(类似于Vue2中的 mounted、Vue3中的onMounted)

3.useEffect第二个参数传 [num] 的用法: 与Vue2中的watch用法相同,可以监听属性的变化。与Vue3中的Watch和WatchEffect用法类似,都是用于监听数据变化的

二、完整代码

1.代码如下

import React, { useState, useEffect } from "react"
import "./index.css";
import { Button, Space } from "antd";
export default function Father() {
     const [num, setNum] = useState(0)
     const [state, setSate] = useState(true)

     const addNum = (val: number) => {
          val++
          setNum(val)
     }
     const updateState = (val: boolean) => {

          setSate(!val)
     }



     //1. 不传第二个参数
     useEffect(() => {
          console.log('father组件重新渲染了');
     })
     //2. 传第二个参数([])
     useEffect(() => {
          console.log(num, state, '两个数据全都修改了');
     }, [])
     //3. 传第二个参数([num])
     useEffect(() => {
          console.log(num, 'num修改了');

     }, [num])

     return <div id="father">
          <div>
               <Space><Button onClick={() => { addNum(num) }} >修改num值:{num}</Button><Button onClick={() => { updateState(state) }}>修改state值:{state}</Button></Space> </div>
     </div>
}

三、注意⚠️

此文章中的代码依赖 Ant Design React 组件库和 TypeScript 在练习的时候一定要看清楚自己的项目符不符合。

在此祝愿大家,都能成为技术大🐮,💪💪💪💪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满脑子技术的前端工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值