美文网首页
浅谈 useEffect

浅谈 useEffect

作者: 再见地平线_e930 | 来源:发表于2020-07-12 14:24 被阅读0次

一、说说 useEffect,什么是副作用?第二个参数为 [ ] 是什么意思?

1.什么是 useEffect ?

React 官方文档解释:Effect Hook 可以让你在函数组件中执行 副作用 操作

2.什么是副作用?

副作用 ( side effect ): 数据获取,数据订阅,以及手动更改 React 组件中的 DOM 都属于副作用。

因为我们渲染出的页面都是静态的,任何在其之后的操作都会对他产生影响,所以称之为副作用。

副作用又分为两种:(1)无需清除的副作用   (2)需要清除的副作用

(1)无需清除的副作用:

有时候,我们只想在 React 更新 DOM 之后运行一些额外的代码。比如发送网络请求,手动变更 DOM,记录日志,这些都是常见的无需清除的操作。因为我们在执行完这些操作之后,就可以忽略他们了。

(2)需要清除的副作用:

之前,我们研究了如何使用不需要清除的副作用,还有一些副作用是需要清除的。例如订阅外部数据源,添加DOM事件。这种情况下,清除工作是非常重要的,可以防止引起内存泄露

在这个例子中,给鼠标的 click 事件添加了一个监听器,

点击鼠标,会在屏幕打印出鼠标当前的位置,并在控制台打印出 inner。但是这里存在一个问题,打印inner的次数并不是线性增加(点一次增加一次),而是点一次,inner被打印了多次。 这是因为我们在每次更新渲染页面的时候都会调用 useEffect 的回调函数,这样就会添加越来越多的 click 事件,而没有清除。

如何清除?

可以发现,对比之前的代码,这里多 return 了一个函数,可以在这个函数中做清除操作

现在点击鼠标之后, inner 被打印的次数就是线性增加,点一次,inner 被打印一次,而不是被打印多次

3.useEffect的第二个参数?(控制 useEffect 的执行)

(1)第一个参数为一个函数:

这个函数的目的就是为了告诉 React 组件需要在渲染后执行哪些操作,这个函数会在DOM更新之后被调用,use Effect 默认在每次渲染之后都会执行。但是也可以手动控制它的执行。

(2)第二个参数(一个数组):

当数组中的任意一项变化的时候,useEffect会被重新执行 

如果传递一个空数组 [ ],告诉 useEffect 不依赖于 state、props中的任意值, useEffect 就只会运行一次

如果数组中有值

这里的依赖为 like,只有当 like 变化时,useEffect 才会执行,而当 on 变化时,useEffect 不会执行

相关文章

  • 浅谈 useEffect

    一、说说 useEffect,什么是副作用?第二个参数为 [ ] 是什么意思? 1.什么是 useEffect ?...

  • 详解react useEffect 和 useLayoutEff

    useEffect 引用官方 使用 useEffect 完成副作用操作。赋值给 useEffect 的函数会在组件...

  • Hooks API

    useEffect useEffect的使用 参考上篇文章 执行时机: useEffect可以看做componen...

  • react hooks 之 useEffect

    useEffect useEffect 可以弥补函数组件没有生命周期的缺点。我们可以在useEffect第一个参数...

  • 从react源码分析useEffect与useLayoutEff

    本文将从useEffect的‘闪烁’问题切入,通过devtools并结合源码来分析useEffect与useLay...

  • useEffect

    目标 页面count会递增 console里面的数会递增 问题描述 页面上的count只会改变一次,即从0变为1 ...

  • useEffect

    副作用 对环境或全局变量的改变就是副作用,例如修改document.title,对自己state的改变不是副作用 ...

  • useEffect

    1. 基本使用 2. 存在依赖项 依赖项为一个空数组[]时只执行一次 只要有一个变化useEffect都会重复执行...

  • useEffect

    1.useEffect的特点1)有两个参数callback和dependencies数组;2)如果dependen...

  • useEffect

    useEffect的用法代替componentDidMount的方式,将useEffect的第二个参数传入空数组或...

网友评论

      本文标题:浅谈 useEffect

      本文链接:https://www.haomeiwen.com/subject/vdmgcktx.html