美文网首页
浅谈 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

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