首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏前端笔记薄

    “愚蠢”的useEffect

    useEffect 因为我使用的是react,所以我用 useEffect 监听 function Element() { const [state, setState] = useState( window.xxx) useEffect(() => { console.log('set time:' + window.xxx) setState(window.xxx ) }, [window.xxx]) return

    useEffect {state}
    } 此时,我发现我太年轻了,useEffect 无法区分是否变化。 因为根据官网说,react只会在state更新时候,重新判断 useEffect 是否执行。如果没有state变化,useEffect 连执行的机会都没有。

    41740编辑于 2022-12-27
  • 来自专栏前端开发

    react hooks useEffect 用法

    useEffect 是 React Hooks 中用于处理副作用的核心钩子,可模拟类组件中的生命周期方法,如 componentDidMount、componentDidUpdate 和 componentWillUnmount 以下是其详细用法:基本语法useEffect(() => { // 副作用逻辑(如数据请求、事件监听、DOM操作等) return () => { // 清理函数(可选):组件卸载或依赖变化前执行 useEffect(() => { console.log('组件挂载完成'); // 示例:初始化数据请求 fetchData();}, []); // 空依赖 → 只执行一次2. const [count, setCount] = useState(0);// 当 count 变化时执行useEffect(() => { console.log(`count 变为: ${count useEffect 可以清晰地管理组件的副作用逻辑,避免类组件中生命周期方法的冗余。

    35610编辑于 2025-08-14
  • 来自专栏子曰五溪

    早读《A Complete Guide to useEffect

    https://overreacted.io/a-complete-guide-to-useeffect/ 这篇文章 Dan 将让你最终领会使用 useEffect 的一切,由于提取精髓,因此略有删减。 effect 是如何获取最新 count 的值的,我们来看另外一个例子: function Counter() { const [count, setCount] = useState(0); useEffect 我们需要理解 useEffect 并不完全等同于 componentDidMount,由于闭包的原因它获取的 props 和 state 都是旧值,如果你想获取最新的,你可以使用 ref,我们需要明白的是它的建立并不是来反应生命周期 让我们来看另外一个例子: function Article({ id }) { const [article, setArticle] = useState(null); useEffect(

    95220发布于 2019-12-18
  • 来自专栏Czy‘s Blog

    useEffect与useLayoutEffect

    useEffect与useLayoutEffect useEffect与useLayoutEffect可以统称为Effect Hook,Effect Hook可以在函数组件中执行副作用操作,副作用是指函数或者表达式的行为依赖于外部环境 useEffect useEffect Hook可以看做 componentDidMount、componentDidUpdate和componentWillUnmount这三个生命周期函数的组合,但是使用多个 Effect实现关注点分离,也就是说useEffect的粒度更低,可以将各个关注的位置分离处理副作用。 useEffect hook执行。 useLayoutEffect useLayoutEffect和useEffect很像,函数签名也是一样,唯一的不同点就是useEffect是异步执行,而useLayoutEffect是同步执行的。

    1.6K30编辑于 2022-05-06
  • 来自专栏不知非攻

    useEffect 实践案例(一)

    序 对于 useEffect 的掌握是 React hooks 学习的重中之重。因此我们还需要花一些篇幅继续围绕它讲解。 在上一篇文章中,我们使用两个案例分析了 useEffect 的理论知识。 接下来,我们通过一些具体的实践案例来学习 useEffect 的运用 1 需求 现有一个简单的需求,要实现一个搜索框,输入内容之后,点击搜索按钮,然后得到一个列表。 + useEffect(() => { + searchApi(str.current).then(res => { + setList(res) + setLoading(false OK,这样需求就完整的被解决,不过此时我们发现,useEffect 的逻辑与 onSure 的逻辑高度重合,他们一个代表初始化逻辑,一个代表更新逻辑。 的依赖项传入,onSure 里就可以只保留这一行代码 useEffect(() => { loading && getList() }, [loading]) function onSure()

    41910编辑于 2023-11-22
  • 来自专栏Czy‘s Blog

    手写useState与useEffect

    手写useState与useEffect useState与useEffect是驱动React hooks运行的基础,useState用于管理状态,useEffect用以处理副作用,通过手写简单的useState 与useEffect来理解其运行原理。 一个简单的useEffect的使用如下。 import { useEffect, useState } from "react"; import ". Hooks能够调用诸如useState、useEffect、useContext等,普通函数则不能。

    2.4K10编辑于 2022-05-06
  • 来自专栏不知非攻

    重点来了,useEffect

    useEffect 副作用 序 当了二十多天废物,今天开始更新,让大家久等了。 . ---- useEffect 是一个难以掌握的知识点。许多人对它半知半解,因此他们觉得函数式组件不受控制。 许多朋友试图利用 class 语法中的生命周期来类比理解 useEffect,因为官方文档就是这么引导的,那么他们多半会陷入一些误区,因此,学习之前,大家需要明确的是,生命周期函数与 useEffect 01 概念 useEffect 可以让使用者在函数组件中执行副作用操作。 那什么是副作用操作呢? 02 语法 // 中括号表示参数可选 useEffect(effct[, deps]) useEffect 是 React 提供的 Hook,它能够帮助我们定义 effect 函数。

    1.3K20编辑于 2022-05-24
  • 来自专栏进阶高级前端工程师

    React源码中的useEffect

    热身准备这里不再讲useLayoutEffect,它和useEffect的代码是一样的,区别主要是:执行时机不同;useEffect是异步, useLayoutEffect是同步,会阻塞渲染;初始化 mountmountEffect 这样就巧妙的实现了useEffect基于deps来判断是否需要执行回调函数。 到这里, 我们搞明白了,不管useEffect里的deps有没有变化都会为回调函数创建effect并添加到effect链表和fiber.updateQueue中,但是React会根据effect.tag 执行副作用我们现在知道了,useEffect是异步执行的。那么这个回调函数副作用会在什么时候执行呢?useEffect回调函数会在layout阶段之后执行。现在我们来了解下具体调用执行的流程。 useEffect是怎么判断回调函数是否需要执行的?useEffect是同步还是异步?useEffect是通过什么实现异步的?useEffect为什么要要优先选用MessageChannel实现异步?

    1.4K20编辑于 2022-12-02
  • 来自专栏不知非攻

    深度探讨 useEffect 使用规范

    在这之前,我们要首先明确一下 useEffect 的语法规则,useEffect 的依赖项必须是 state 与 props,否则依赖项发生了变化,effect 也不会执行。 但是 useEffect 则需要等待组件渲染完整之后才会开始执行缓存的函数。 因此我们使用 useEffect 来处理这部分副作用逻辑。 useEffect 有更复杂的执行逻辑,如果你对其掌握得不够准确时,他很容易导致你的程序出现一些你无法理解的迷惑现象,因此在这两个基础之上,react 官方文档的意思就是,useEffect 能不用就不用 5 总结 react 官方文档在建议与规范的角度上会尽可能让大家避免使用 useEffect,我猜测大概是由于许多初学者在 useEffect 对于依赖项的使用会产生不少疑问而导致的。

    67710编辑于 2023-11-27
  • 来自专栏后端学习之道

    useEffect() 与 useState()、props 和回调、useEffect 的依赖类型介绍

    useEffect() 与 useState() useState是一个 React 钩子函数,用于管理和更新功能组件中的状态。

    }
    ); } 当需要与外界交互、处理异步操作或在组件卸载时执行清理任务时,UseEffect 非常有用。 'Light' : 'Dark'} Mode </button> useEffect() 的依赖类型 React 中的 useEffect 钩子接受一个可选的第二个参数 useEffect(() => { // ... (code) }, [someCallback]); 上面,我们描述了 useState() 和 useEffect() 的用例、props 和回调之间的区别,以及描述了 useEffect() 依赖类型的三种场景

    1.9K30编辑于 2023-11-08
  • 来自专栏杨不易呀

    React-Hooks-useEffect

    useEffect Hook 概述可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个生命周期函数的组合 useEffect Hook 特点可以设置依赖, 只有依赖发生变化的时候才执行可以设置依赖, 只有依赖发生变化的时候才执行示例演示代码如下:import React, {useState, useEffect useEffect Hook 对比类组件生命周期方法的优势:易于拆分例如在之前的类组件的生命周期方法,在组件被挂载的时候要做一些其它的事情,就需要全部写在一个方法当中但是用了 useEffect Hook 就可以完美的解决该问题示例如下:import React, {useState, useEffect} from 'react';function Home() { const [nameState console.log('注册监听'); return () => { console.log('移出监听'); } }); useEffect

    47630编辑于 2023-10-01
  • 来自专栏分享学习

    React系列:useEffect的使用

    useEffect的使用 useEffect的第二个参数不同,useEffect的加载不同 当第二个参数为没有的时候 只在组件初始渲染和组件更新之后加载 当第二个参数为[] 的时候 只在初始渲染之后加载 当第二个参数为[有依赖] 的时候 只在初始渲染之后和依赖修改的时候进行加载 function App() { useEffect(()=>{ //额外的操作 获取频道列表 async

    38110编辑于 2023-12-18
  • 来自专栏前端干货和生活感悟

    ReactHooks源码解析之useEffect

    前言 举个例子来讲解下React.useEffect(): import React, {useEffect} from 'react'; import React from 'react'; export 时,会先执行上个useEffect的return回调函数: useEffect(()=>{ console.log('classComponent:componentDidMount') 为什么会先执行上个useEffect的return回调函数? 的源码解析流程就结束了,接下来看下多次调用useEffect的流程 八、updateEffect() 作用: 多次调用 useEffect 时,调用的函数 源码: //多次更新时,走这里 function 的时候,会先去执行上一次的 destory(),再执行本次的create() useEffect流程图 ?

    1.3K41发布于 2020-06-03
  • 来自专栏小李的前端小屋

    基于 useEffect 封装高阶 hook API

    前言 useEffect 通常用于状态更新导致的副作用。 useEffect(effect, deps); 它有两个参数: effect effect 是一个表示副作用的函数,组件每渲染一次,该函数就自动执行一次。 deps 有时候,我们不希望 useEffect() 每次渲染都执行,这时可以使用它的第二个参数 deps,使用一个数组指定副作用函数的依赖项,只有依赖项发生变化,才会重新渲染。 ---- 本文主要分享一些基于 useEffect 封装的高阶 effect hook。 我们可以自己改造一下实现 useAsyncEffect,让 useEffect 支持 async 函数。

    1.1K40编辑于 2022-07-13
  • 来自专栏FunTester

    useEffect 的阴暗面

    今天咱们就来聊聊 useEffect 的那些坑,以及如何优雅地避开它们。 理解 useEffect 什么是 useEffect useEffect 是 React 内置的一个钩子函数,专门用来处理函数组件中的副作用。什么是副作用? useEffect 的工作原理 useEffect 接受两个参数:第一个是包含副作用逻辑的函数,第二个是可选的依赖数组。这个依赖数组就像是一个触发器,决定了副作用什么时候执行。 >{count}

    ; } 这个组件一渲染就会陷入死循环,因为每次 count 更新都会触发 useEffect,而 useEffect 又会更新 count。 使用场景:当你有一个函数或值需要在 useEffect 的依赖数组中使用,但这个函数或值在每次渲染时都会重新创建,导致 useEffect 频繁执行。

    18210编辑于 2025-12-29
  • 来自专栏react源码分析

    useLayoutEffect和useEffect的区别

    大家面试的过程中有没有遇到过这样的问题呢,useLayoutEffect和useEffect的区别是什么,大家可能会回答useEffect是异步的,useLayoutEffect是同步的,这样回答面试官真的会满意慢 先来看个例子:点击触发更新之后,如果count之前的状态是0,我们随机生成一个数字,在阻塞一段时间,在设置count位随机值,看看在useEffect和useLayoutEffect这两种情况下会有什么不同 在commit阶段结束之后flushPassiveEffects执行useEffect的销毁函数和回调函数。 commit阶段收尾工作所以useLayout/componentDidMount和useEffect的区别是什么? 答:他们在commit阶段不同时机执行,useEffect在commit阶段结尾异步调用,useLayout/componentDidMount同步调用图片相关参考视频讲解:进入学习

    59760编辑于 2022-12-19
  • 来自专栏FunTester

    useEffect 中的异步请求

    你可能会用 useEffect 来管理这个过程,表面看起来一切正常——页面能切换,内容也能正确展示。 但实际场景远比想象复杂:用户可能会连续快速切换频道,网络也可能出现延迟,更别说组件还可能被卸载。 通常,面试官会给你这样一段代码,并抛出问题: useEffect(() => { async function fetchData() { const response = await fetch 从 React 的角度看,这里既没有直接把 useEffect 写成 async(规避了官方不推荐的做法),依赖数组 [url] 也写得规范,请求数据后顺利更新 state,整体流程看上去没什么纰漏,完全符合官方和 面试官真正想了解的 很多人会背答案:“useEffect 用来处理副作用。”但在面试中,光会背概念几乎没有加分,就像你熟记交通法规,并不代表你真的会开车。 这说明副作用的生命周期可能比组件本身更长,这也是为什么 useEffect 设计了 cleanup 函数,用于处理这种“善后工作”。

    14010编辑于 2025-12-29
  • 来自专栏魔术师卡颂

    关于useEffect的一切

    这,就是关于useEffect的一切。 如果deps变化,则useEffect对应FunctionComponent的fiber会被打上Passive(即:需要执行useEffect)的标记。 在渲染器中,遍历effectList过程中遍历到该fiber时,发现Passive标记,则依次执行该useEffect的destroy(即useEffect回调函数的返回值函数)与create(即useEffect 对于useEffect来说,遍历effectList时,会找到的所有包含Passive标记的fiber。 依次执行对应useEffect的destroy。 这里提供个在线Demo[1],你可以将Demo中的useLayoutEffect替换为useEffect,看看他们的区别。 总结 通过本文,我们了解了useEffect的完整执行过程。

    1.3K10发布于 2020-09-01
  • 来自专栏前端精读评论

    96.精读《useEffect 完全指南》

    相比 useState 或者自定义 Hooks 而言,最有理解难度的是 useEffect 这个工具,希望借着 a-complete-guide-to-useeffect 一文,深入理解 useEffect 如何用 useEffect 取数?参数 [] 代表什么? useEffect 的依赖可以是函数吗?是哪些函数? 为何有时候取数会触发死循环? 要说清楚 useEffect,最好先从 Render 概念开始理解。 回收机制 在组件被销毁时,通过 useEffect 注册的监听需要被销毁,这一点可以通过 useEffect 的返回值做到: useEffect(() => { ChatAPI.subscribeToFriendStatus useEffect 还有什么优势 useEffect 在渲染结束时执行,所以不会阻塞浏览器渲染进程,所以使用 Function Component 写的项目一般都有用更好的性能。

    1.1K30编辑于 2022-03-14
  • 来自专栏不知非攻

    超性感的React Hooks(四):useEffect

    这里有一段介绍useEffect的文字,如果你能够从中领悟到useEffect的用法,那么恭喜你,你应该大概率是个天赋型选手。 许多朋友试图利用class语法中的生命周期来类比理解useEffect,也许他们认为,hooks只是语法糖而已。 利用生命周期的实现方式我就不再介绍了,因为今天的主场是useEffect。 import React, { useState, useEffect } from 'react'; import '. useEffect表面上看起来简单,但使用起来一点也不简单。更多的知识,在接下来的文章中,结合其他案例理解。

    1.8K40发布于 2020-07-23
  • 领券