React 之 Effect与事件(event)(八)

Effect(useEffect Hook)

在React中,Effect(或者更具体地说,useEffect Hook)是一个特殊的函数,它允许你在函数组件中执行副作用操作。这些副作用操作可能包括数据获取、手动更改DOM、订阅或取消订阅事件、或者执行任何在渲染过程中不需要执行但需要在组件的生命周期中某个点执行的操作。
相当于vue中的计算属性computed和watch

useEffect 的工作原理:

当你传入一个函数给 useEffect 时,React会在每次组件渲染后(包括组件的首次渲染)调用这个函数。但请注意,它并不会阻塞浏览器更新屏幕,因此你的应用看起来仍然是响应式的。

事件(event)

事件(event)在Web开发中是一个非常重要的概念。它们是由用户或浏览器与页面交互时触发的,例如点击按钮、滚动页面、提交表单等。事件处理器(event handler)是处理这些事件的函数,你可以在事件处理器中执行特定的操作,例如更新状态、导航到新的页面等。

useEffect 和事件之间的主要区别:

  1. 触发方式:useEffect 是在组件渲染后自动调用的,而事件是由用户或浏览器与页面交互时触发的。
  2. 用途:useEffect 主要用于执行副作用操作,如数据获取、DOM操作等。而事件则主要用于响应用户或浏览器的交互。
  3. 依赖:useEffect 可以依赖于组件的props和state,并且可以在每次这些依赖项更改时重新运行。而事件处理器通常只依赖于触发事件的特定上下文。
  4. 异步性:虽然两者都可以是异步的(例如,你可以在 useEffect 中使用异步函数,或者在事件处理器中调用异步函数),但 useEffect 的设计允许你更容易地处理异步副作用,如数据获取。
  5. 生命周期:在类组件中,useEffect 可以看作是 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个生命周期方法的组合。而事件则与这些生命周期方法没有直接关联。
  6. 取消:useEffect 允许你返回一个清理函数,这个函数会在下次 useEffect 运行之前被调用,或者当组件卸载时被调用。这可以用于取消订阅、清理DOM更改等。而事件没有直接的"取消"机制,但你可以通过移除事件监听器来停止监听特定事件。

Effect(useEffect Hook)代码栗子:

useEffect 相当于vue中的计算属性computed和watch。

javascript 复制代码
import React, { useState, useEffect } from 'react';  
  
function ExampleComponent() {  
  const [count, setCount] = useState(0);  
  
  // 使用 useEffect 在组件挂载后打印一条消息,并在每次更新后更新文档标题  
  useEffect(() => {  
    // 组件首次渲染和每次更新后都会执行的代码  
    console.log('Component did mount or update');  
  
    // 使用浏览器API更新页面标题  
    document.title = `You clicked ${count} times`;  
  
    // 返回一个函数,该函数会在组件卸载或下次执行effect之前调用  
    return () => {  
      // 清理函数,用于清除副作用  
      console.log('Component will unmount');  
    };  
  }, [count]); // 第二个参数是依赖项数组,如果count发生变化,则effect会重新运行  
  
  // 一个函数,用于在点击按钮时增加计数  
  const handleClick = () => {  
    setCount(count + 1);  
  };  
  
  return (  
    <div>  
      <p>You clicked {count} times</p>  
      <button onClick={handleClick}>Click me</button>  
    </div>  
  );  
}  
  
export default ExampleComponent;
相关推荐
看谷秀7 分钟前
arkts- 8 三方库介绍
前端·arkts
六边形6668 分钟前
独立开发不知道做什么?使用 TRAE Work 抓取差评痛点,快速跑通产品立项流
前端·后端·面试
亿元程序员9 分钟前
小伙伴发我一个 1G 的 Cocos 项目,assets 只有几十兆
前端
paopaokaka_luck11 分钟前
基于springboot3+vue3的文山民族文化资源展示与推广平台(协同过滤算法、Echarts 图形化分析)
java·前端·spring boot·学习·echarts
临江仙45513 分钟前
同一个 AI Agent 如何同时服务 Web、微信和 QQ:PureChat 的渠道架构实践
前端·人工智能·后端
程序员鱼皮16 分钟前
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
前端·后端·ai编程
马可家的菠萝21 分钟前
AI Agent Demo 10 分钟就能跑,真正难的是让它 200 个场景都别乱来
前端·后端·aigc
Vuji30 分钟前
Pi 插件解剖|summarize.ts:199 行,给 Agent 的对话做一份 Markdown 总结
前端·人工智能·agent
逻辑帧35 分钟前
给 AI 时代找工作的同学一些实用建议
前端·后端
蜡台1 小时前
Jetpack Compose 从入门到精通
android·前端·kotlin·compose·jepack