首页 > 其他分享 >React 《useEffect》

React 《useEffect》

时间:2024-04-27 10:11:36浏览次数:24  
标签:执行 函数 渲染 React 副作用 组件 useEffect

概念

useEffect是一个React Hook函数,用于在React组件中创建不是由事件引起而是由渲染本身引起的操作(副作用), 比 如发送AJAX请求,更改DOM等等
image
:::warning
说明:上面的组件中没有发生任何的用户事件,组件渲染完毕之后就需要和服务器要数据,整个过程属于“只由渲染引起的操作”
:::

基础使用

需求:在组件渲染完毕之后,立刻从服务端获取平道列表数据并显示到页面中

image
说明:

  1. 参数1是一个函数,可以把它叫做副作用函数,在函数内部可以放置要执行的操作
  2. 参数2是一个数组(可选参),在数组里放置依赖项,不同依赖项会影响第一个参数函数的执行,当是一个空数组的时候,副作用函数只会在组件渲染完毕之后执行一次
    :::warning
    接口地址:http://geek.itheima.net/v1_0/channels
    :::

useEffect依赖说明

useEffect副作用函数的执行时机存在多种情况,根据传入依赖项的不同,会有不同的执行表现

依赖项 副作用功函数的执行时机
没有依赖项 组件初始渲染 + 组件更新时执行
空数组依赖 只在初始渲染时执行一次
添加特定依赖项 组件初始渲染 + 依赖项变化时执行
image

清除副作用

概念:在useEffect中编写的由渲染本身引起的对接组件外部的操作,社区也经常把它叫做副作用操作,比如在useEffect中开启了一个定时器,我们想在组件卸载时把这个定时器再清理掉,这个过程就是清理副作用

image
:::warning
说明:清除副作用的函数最常见的执行时机是在组件卸载时自动执行
:::

import { useEffect, useState } from "react"

function Son () {
  // 1. 渲染时开启一个定时器
  useEffect(() => {
    const timer = setInterval(() => {
      console.log('定时器执行中...')
    }, 1000)

    return () => {
      // 清除副作用(组件卸载时)
      clearInterval(timer)
    }
  }, [])
  return <div>this is son</div>
}

function App () {
  // 通过条件渲染模拟组件卸载
  const [show, setShow] = useState(true)
  return (
    <div>
      {show && <Son />}
      <button onClick={() => setShow(false)}>卸载Son组件</button>
    </div>
  )
}

export default App

标签:执行,函数,渲染,React,副作用,组件,useEffect
From: https://www.cnblogs.com/paylove/p/18161778

相关文章

  • React 《组件间通信》
    React组件通信概念:组件通信就是组件之间的数据传递,根据组件嵌套关系的不同,有不同的通信手段和方法A-B父子通信B-C兄弟通信A-E跨层通信父子通信-父传子基础实现实现步骤父组件传递数据-在子组件标签上绑定属性子组件接收数据-子组件通过props参数接收数据......
  • React 《入门案例》
    一、案例二、创建项目npminitvite@latest#选择react#删除不必要的css,文件等#安装依赖classnames、sass、uuid、dayjs、lodashnpmi-Sclassnames#处理className属性npmi-Suuid#生成uuidnpmi-Sdayjs#日期处理npmi-Slodash#操作数组npmi-D......
  • E. Chain Reaction
    https://codeforces.com/contest/1954/problem/E题意:n个数,可以对每个数释放闪电,闪电从释放的位置一直传到左右边界或者传到某个小于等于0的数终止,并且每个数都会减去闪电值k。问最少多少次释放闪电后可以让所有的数小于等于0。思路:从左往右考虑,假设第一个数的权值为1,如果当前数>......
  • React 《常用库》
    lodashLodash通过降低array、number、objects、string等等的使用难度从而让JavaScript变得更简单。Lodash的模块化方法非常适用于:遍历array、object和string对值进行操作和检测创建符合功能的函数官网https://www.lodashjs.com/#installnpmi--savelodash......
  • react native cli 替换安卓应用图标
    1.拿到需要替换的logo图标,最好是1024×1024尺寸。2.根据原图生成不同尺寸的logo:有很多类似功能的网站,这里我使用的是图标工厂图标工厂地址:图标生成网站首先上传图片然后可以配置一些其他选项如圆角等等:上传后会看到预览效果:3.替换项目中的logo图标:找到图标位置:项......
  • 如何基于 React 实现的指令
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:信居前言实现这个功能的想法,来源于数栈产品中开发的前端功能权限控制,相信大家都在项目中或多或少的接触和开发过这个功能。笔者在项目......
  • 使用create-react-app,配置proxy报错(options.allowedHosts[0] should be a non-empty
    ​#使用create-react-app,配置proxy报错(options.allowedHosts[0]shouldbeanon-emptystring)今天在启动项目的时候遇到一个神奇的问题,这个问题具体报错信息是:Invalidoptionsobject.DevServerhasbeeninitializedusinganoptionsobjectthatdoesnotmatchtheAP......
  • react报错export ‘Switch‘ (imported as ‘Switch‘) was not found in ‘react-rou
    报如下错,查react-router-dom版本。 因为:react-router-dom从V5升级到V6造成的(1)将Switch重命名为Routes(2)Route的新特性变更,component/render被element替代(3) 嵌套路由变得更简单 ......
  • react-native-vision-camera 扫二维码报错 [unknown/unknown] Waiting for the barcod
    1.问题:使用react-native-vision-camera库扫描解析二维码时,部分手机出现如下报错:2.解决:android/app/build.gradle文件中添加依赖:dependencies{//...implementation'com.google.mlkit:barcode-scanning:17.2.0'}3.参考:GitHub相关issues......
  • react native 安装app时报错 ”已安装了签名冲突的应用“
    1.问题描述:reactnative开发完app,手动安装app,报错”已安装了签名冲突的应用“。或者执行命令安装npxreact-nativerun-android--mode=release,报错2.解决方法:直接卸载原来的app发现无效,于是执行:adbuninstall"xxxxx"xxxxx换成你的app名,在这里可以找到:......