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

React-Hook中使用useEffect清除定时器的实现方法

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

React-Hook中使用useEffect清除定时器的实现方法

useEffect

之前我们学习了class组件的声明周期,那么我们想在函数式组件中做一些声明周期有关操作能否实现呢?
函数式组件中是没有生命周期的,所以就可以使用useEffect来替代。我们可以把useEffect看作组件加载、组件更新、组件卸载的三个生命周期方法的组合。

下面我们一起来通过案例学习useEffect的使用:
1.这里需求是写一个点击事件让state累加,并且吧state展示在title上
2.首先要导入React, { useState, useEffect }
3.然后使用 useEffect将state渲染给title
4.最后绑定点击事件

import React, { useState, useEffect } from 'react'

export default function App() {
    const [state, setstate] = useState(0)

    useEffect(() => {
        document.title = `你点击了${state}次`
    })
    return (
        <div>
            <h1>{state}</h1>
            <button onClick={e => setstate(state + 1)}>点击</button>
        </div>
    )
}

查看运行效果:

在这里插入图片描述

所以我们可以发现:默认情况下,useEffect会在第一次渲染之后和每次更新之前都会执行

基于它的这个特性,我们再来看一个例子:
1.实现的效果是,点击按钮能切换状态是否显示page页面,page页面的按钮能够控制age和money的改变,比较简单,大家应该都能看懂

import React, { useState, useEffect } from 'react'

function Page() {
    const [age, setage] = useState(18)
    const [money, setmoney] = useState(1000)

    useEffect(() => {
        console.log('我被执行了')
    })
    return (
        <div>
            <h1>{age}</h1>
            <h2>{money}</h2>
            <button onClick={e => setage(age + 1)}>长大</button>
            <button onClick={e => setmoney(money + 1000)}>变有钱</button>
        </div>
    )
}

export default function App() {
    const [show, setshow] = useState(true)
    return (
        <div>
            <h1>{show}</h1>
            <button onClick={e => setshow(!show)}>切换状态</button>
            {show && <Page/>}
        </div>
    )
}

我这里在useEffect中进行了打印,下面我们来看看何时会触发useEffect

在这里插入图片描述

可以看到每次更新的时候都会触发useEffect,这里的useEffect还可以传入参数,例如:
在后面的数组中写入age和money,实现的效果是一样的

useEffect(() => {
        console.log('我被执行了')
    }, [age, money])

但是如果只写一个:

useEffect(() => {
        console.log('我被执行了')
    }, [age])

查看结果:

在这里插入图片描述

可以看到age状态发生改变时它会被调用,但是money发生改变,他并不会调用
所以这里数组传入是依赖项,只有数组中的状态发生了变化,才会去触发useEffect执行

如果我们想在useEffect中进行请求,也就是只想它触发一次,应该怎么做呢:
如下使用空数组即可:

useEffect(() => {
        console.log('我被执行了')
    }, [])

useEffect清除定时器

先来回顾一下在class组件中如何清除定时器:
如以下代码,需要在componentWillUnmount生命周期函数中进行定时器的清除操作

export class App extends Component {
    state = {
        count: 0
    }
    componentDidMount() {
        this.timer = setInterval(() => {
            this.setState({count: this.state.count + 1})
        }, 500)
    }
    componentWillUnmount() {
        clearInterval(this.timer)
    }
    render() {
        return (
            <div>
                <h1>{this.state.count}</h1>
            </div>
        )
    }
}

那么使用useEffect该如何去实现呢?
只需要return出去就可以了,看下面代码

import React, { useState, useEffect } from 'react'

export default function App() {
    const [state, setstate] = useState(0)
    useEffect(() => {
        const timer = setInterval(() => {
            setstate(prev => prev + 1)
        }, 1000)
        // 清除定时器
        return () => clearInterval(timer)
    }, [])
    return (
        <div>{state}</div>
    )
}

最后

本篇文章的讲解就到这里啦,主要介绍了useEffect的功能以及使用方法,还有如何使用他清除定时器,如果对你有帮助,点赞关注支持下呀~后续还会给大家带来更多优质内容

到此这篇关于React-Hook中useEffect详解(使用useEffect清除定时器)的文章就介绍到这了,更多相关react Hook useEffect清除定时器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

React-Hook中使用useEffect清除定时器的实现方法

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

下载Word文档

猜你喜欢

React-Hook中使用useEffect清除定时器的实现方法

这篇文章主要介绍了React-Hook中useEffect详解(使用useEffect清除定时器),主要介绍了useEffect的功能以及使用方法,还有如何使用他清除定时器,需要的朋友可以参考下
2022-11-13

JS中2种定时器的使用及清除的实现

本文主要介绍了JS中2种定时器的使用及清除的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

vue中清除定时器的方法实例详解

很多情况下,进入和退出vue界面,都没有清除定时器,从而导致有很多定时器一起工作,这样肯定是不行的,下面这篇文章主要给大家介绍了关于vue中清除定时器的方法,需要的朋友可以参考下
2023-02-07

JS中定时器的使用及页面切换时定时器无法清除问题的解决办法

定时器相信大家应该都不陌生,下面这篇文章主要给大家介绍了关于JS中定时器的使用及页面切换时定时器无法清除问题的解决办法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-02-07

Android中使用定时器的三种方法

本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示:因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第一种方法:Thread.sleep();方
2022-06-06

Spring Boot使用Schedule实现定时任务的方法

这篇文章主要介绍了Spring Boot使用Schedule实现定时任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

gxworks2中定时器的使用方法是什么

在GX Works2中,使用定时器的方法如下:打开GX Works2软件,创建一个新的工程或打开一个已有的工程。在工程中选择一个适当的程序,例如主程序。在程序中定义一个定时器变量。可以使用以下语法:TIMER timer_name;在程序
2023-10-26

使用Java实现定时任务的方法有哪些

使用Java实现定时任务的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、 sleep这也是我们最常用的 sleep 休眠大法,不只是当作休眠用,我们还可以利用它很
2023-06-08

基于Android中实现定时器的3种解决方法

在Android开发中,定时器一般有以下3种实现方法:一、采用Handler与线程的sleep(long)方法二、采用Handler的postDelayed(Runnable, long)方法三、采用Handler与timer及TimerT
2022-06-06

C++中使用FFmpeg适配自定义编码器的实现方法

本文介绍了在C++中使用FFmpeg库进行自定义编码器适配的实现方法。文章通过具体的代码示例,介绍了FFmpeg的基本使用方法和自定义编码器的实现过程,帮助读者了解如何在C++中进行音视频编码和解码的开发工作,并能够实现自定义的编码器适配
2023-05-16

Android开发中实现定时器功能的方法有哪些

Android开发中实现定时器功能的方法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、TimerTimer是Android直接启动定时器的类,TimerTask是
2023-05-31

C#中多种高效定时器方法的使用详解

本文主要介绍了C#中多种高效定时器方法的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

解析Android中使用自定义字体的实现方法

1、Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace 2、在Android中可以引入其他字体 。 代码如下:
2022-06-06

怎么使用正则替换的方式实现清除字符串中所有的HTML标签

这篇文章将为大家详细讲解有关怎么使用正则替换的方式实现清除字符串中所有的HTML标签,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何编写一个函数,使用正则替换的方式能够实现清除字符串中所有的HTML标签
2023-06-15

wxpython中自定义事件的实现与使用方法分析

本文实例讲述了wxpython中自定义事件的实现与使用方法。分享给大家供大家参考,具体如下: 创建自定义事件的步骤: ① 定义事件类,该事件类必须继承自wx.PyCommandEvent,并定义get和set方法来获取和设置事件参数。 ②
2022-06-04

编程热搜

目录