我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React Hook中useEffecfa函数如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React Hook中useEffecfa函数如何使用

这篇文章主要介绍“React Hook中useEffecfa函数如何使用”,在日常操作中,相信很多人在React Hook中useEffecfa函数如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React Hook中useEffecfa函数如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

useEffect的详细解析

useEffecf基本使用

我们知道在类组件中是可以有生命周期函数的, 那么如何在函数组件中定义类似于生命周期这些函数呢?

Effect Hook 可以让你来完成一些类似于class中生命周期的功能;

事实上,类似于网络请求、手动更新DOM、一些事件的监听,都是React更新DOM的一些副作用(Side Effects);

所以对于完成这些功能的Hook被称之为 Effect Hook;

假如我们现在有一个需求:页面中的title总是显示counter的数字,分别使用class组件和Hook实现:

类组件实现

import React, { PureComponent } from 'react'export class App extends PureComponent {  constructor() {    super()    this.state = {      counter: 100    }  }  // 进入页面时, 标题显示counter  componentDidMount() {    document.title = this.state.counter  }  // 数据发生变化时, 让标题一起变化  componentDidUpdate() {    document.title = this.state.counter  }  render() {    const { counter } = this.state    return (      <div>        <h3>{counter}</h3>        <button onClick={() => this.setState({counter: counter+1})}>+1</button>      </div>    )  }}export default App

函数组件加Hook的实现:

  • 通过useEffect这个Hook,可以告诉React需要在渲染后执行某些操作;

  • useEffect要求我们传入一个回调函数,在React执行完更新DOM操作之后(也就是组件被渲染完成后),就会回调这个函数;

  • 默认情况下,无论是第一次渲染之后,还是每次更新之后,都会执行这个回调函数; 一般情况下我们在该回调函数中都是编写副作用的操作(例如网络请求, 操作DOM, 事件监听)

因此需要注意的是, 有许多说法说useEffect就是用来模拟生命周期的, 其实并不是; useEffect可以做到模拟生命周期, 但是他主要的作用是用来执行副作用的

import React, { memo, useEffect, useState } from 'react'const App = memo(() => {  const [counter, setCounter] = useState(200)  // useEffect传入一个回调函数, 在页面渲染完成后自动执行  useEffect(() => {    // 一般在该回调函数在编写副作用的代码(网络请求, 操作DOM, 事件监听)    document.title = counter  })  return (    <div>      <h3>{counter}</h3>      <button onClick={() => setCounter(counter+1)}>+1</button>    </div>  )})export default App


清除副作用(Effect)

在class组件的编写过程中,某些副作用的代码,我们需要在componentWillUnmount中进行清除:

比如我们之前的事件总线或Redux中手动调用subscribe;

都需要在componentWillUnmount有对应的取消订阅;

Effect Hook通过什么方式来模拟componentWillUnmount呢?

useEffect传入的回调函数A本身可以有一个返回值,这个返回值是另外一个回调函数B:

type EffectCallback = () => (void | (() => void | undefined));

为什么要在 effect 中返回一个函数?

这是 effect 可选的清除机制。每个 effect 都可以返回一个清除函数;

如此可以将添加和移除订阅的逻辑放在一起;

它们都属于 effect 的一部分;

React 何时清除 effect?

React 会在组件更新和卸载的时候执行清除操作, 将上一次的监听取消掉, 只留下当前的监听 ;

正如之前学到的,effect 在每次渲染的时候都会执行;

import React, { memo, useEffect } from 'react'const App = memo(() => {  useEffect(() => {    // 监听store数据发生改变    const unsubscribe = store.subscribe(() => {    })    // 返回值是一个回调函数, 该回调函数在组件重新渲染或者要卸载时执行    return () => {      // 取消监听操作      unsubscribe()    }  })  return (    <div>      <h3>App</h3>    </div>  )})export default App


使用多个useEffect

使用Hook的其中一个目的就是解决class中生命周期经常将很多的逻辑放在一起的问题:

比如网络请求、事件监听、手动修改DOM,这些往往都会放在componentDidMount中;

一个函数组件中可以使用多个Effect Hook,我们可以将逻辑分离到不同的useEffect中:

import React, { memo, useEffect } from 'react'const App = memo(() => {  // 监听的useEffect  useEffect(() => {    console.log("监听的代码逻辑")    return () => {      console.log("取消的监听代码逻辑")    }  })  // 发送网络请求的useEffect  useEffect(() => {    console.log("网络请求的代码逻辑")  })  // 操作DOM的useEffect  useEffect(() => {    console.log("操作DOM的代码逻辑")  })  return (    <div>      App    </div>  )})export default App

Hook允许我们按照代码的用途分离它们, 而不是像生命周期函数那样, 将很多逻辑放在一起:

React将按照 effect 声明的顺序依次调用组件中的每一个 effect;


useEffect性能优化

默认情况下,useEffect的回调函数会在每次渲染时都重新执行,但是这会导致两个问题:

某些代码我们只是希望执行一次即可(比如网络请求, 组件第一次渲染中执行一次即可, 不需要执行多次),类似于类组件中的componentDidMount和componentWillUnmount中完成的事情;

另外,多次执行也会导致一定的性能问题;

我们如何决定useEffect在什么时候应该执行和什么时候不应该执行呢?

useEffect实际上有两个参数:

  • 参数一: 执行的回调函数, 这个参数我们已经使用过了不再多说;

  • 参数二: 是一个数组类型, 表示 该useEffect在哪些state发生变化时,才重新执行;(受谁的影响才会重新执行)

案例练习:

受count影响的Effect;

import React, { memo, useEffect, useState } from 'react'const App = memo(() => {  const [counter, setCounter] = useState(100)    // 发送网络请求的useEffect, 只有在counter发生改变时才会重新执行  useEffect(() => {    console.log("网络请求的代码逻辑")  }, [counter])  return (    <div>      <h3 onClick={() => setCounter(counter+1)}>{counter}</h3>    </div>  )})export default App

但是,如果一个函数我们不希望依赖任何的内容时,也可以传入一个空的数组 []:

那么这里的两个回调函数分别对应的就是componentDidMount和componentWillUnmount生命周期函数了;

import React, { memo, useEffect, useState } from 'react'const App = memo(() => {  const [counter, setCounter] = useState(100)    // 传入空数组表示不受任何数据依赖  useEffect(() => {    // 此时传入的参数一这个回调函数: 相当于componentDidMount    console.log("监听的代码逻辑")    // 参数一这个回调函数的返回值: 相当于componentWillUnmount    return () => {      console.log("取消的监听代码逻辑")    }  }, [])  return (    <div>      <h3 onClick={() => setCounter(counter+1)}>{counter}</h3>    </div>  )})export default App

总结: useEffect可以模拟之前的class组件的生命周期(类似而不是相等), 并且它比原来的生命周期更加强大, 青出于蓝而胜于蓝

到此,关于“React Hook中useEffecfa函数如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React Hook中useEffecfa函数如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

React Hook中useEffecfa函数如何使用

这篇文章主要介绍“React Hook中useEffecfa函数如何使用”,在日常操作中,相信很多人在React Hook中useEffecfa函数如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rea
2023-07-04

浅析React Hook中useEffecfa函数的使用

本篇文章给大家介绍一下React Hook中的useEffecfa函数,聊聊useEffecfa函数的使用细节,希望对大家有所帮助!
2022-11-22

React Hook中的useEffecfa函数的使用小结

React会在组件更新和卸载的时候执行清除操作,将上一次的监听取消掉,只留下当前的监听,这篇文章主要介绍了React Hook useEffecfa函数的使用细节详解,需要的朋友可以参考下
2022-11-13

React Hook中如何使用State Hook

今天小编给大家分享一下React Hook中如何使用State Hook的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Hoo
2023-06-29

hook如何在react中使用

今天就跟大家聊聊有关hook如何在react中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、什么是hook?react hook是react 16.8推出的方法,能够让函数式
2023-06-14

react如何在React html中使用

本篇文章为大家展示了react如何在React html中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基本使用
2023-06-14

setInterval函数怎么在React中使用

setInterval函数怎么在React中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、setInterval函数(1) 定义setInterval() 方法可按
2023-06-14

React中如何使用Redux

这篇文章主要讲解了“React中如何使用Redux”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React中如何使用Redux”吧!Redux 是一种状态容器 JS 库,提供可预测的状态管理
2023-07-02

React中如何使用scss

这篇文章主要介绍“React中如何使用scss”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React中如何使用scss”文章能帮助大家解决问题。React中使用scss首先导入node-sass
2023-07-05

详解Python开发中如何使用Hook技巧

什么是Hook,就是在一个已有的方法上加入一些钩子,使得在该方法执行前或执行后另在做一些额外的处理,那么Hook技巧有什么作用以及我们为什么需要使用它呢,事实上如果一个项目在设计架构时考虑的足够充分,模块抽象的足够合理,设计之初为以后的扩展
2022-06-04

C++ 中如何使用函数?

c++++ 中的使用函数函数是一种可重用的代码块,用于提高代码的可重用性和模块化。函数声明指定函数名称、参数类型和返回类型。函数定义提供函数体的实现。函数通过使用其名称并传递适当参数来调用。C++ 中的使用函数函数是一种代码块,可以在程序
C++ 中如何使用函数?
2024-04-12

setState如何在react 中使用

setState如何在react 中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。setState是同步还是异步自定义合成事件和react钩子函数中异步更新state以
2023-06-14

react中的mobx如何使用

这篇文章主要介绍“react中的mobx如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react中的mobx如何使用”文章能帮助大家解决问题。1.新建一个mobx.jsx文件import {
2023-07-06

React中的css如何使用

这篇文章主要介绍了React中的css如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的css如何使用文章都会有所收获,下面我们一起来看看吧。一、行内样式使用import React from
2023-06-27

React中如何使用RxJS优化数据流

这篇文章主要介绍了React中如何使用RxJS优化数据流的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中如何使用RxJS优化数据流文章都会有所收获,下面我们一起来看看吧。一般来说,处理组件中的数据流无
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录