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;
相关推荐
名字还没想好☜6 分钟前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
Access开发易登软件6 分钟前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
10share15 分钟前
React 新一代样式隔离方案 —— 编译时、零运行时、原生写法
前端·react.js
upgrador24 分钟前
桌面应用开发:Electron 与 NSIS 的关系、打包流程及 Windows 本地构建实战
javascript·windows·electron
Revolution6126 分钟前
Node.js 是什么:前端项目里哪些事情由它完成
前端·面试·node.js
我要两颗404西柚44 分钟前
Stage three:VUE工程化与实战工具
前端·javascript·vue.js
光影少年1 小时前
RN 的EventEmitter 双向通信
前端·react native·react.js
布鲁飞丝1 小时前
从零实现富文本编辑器#-浏览器选区与编辑器选区模型同步
java·前端·编辑器
写不来代码的草莓熊2 小时前
Cesium 地图交互绘制圆形、多边形
前端·javascript·地图
weixin_427771612 小时前
前端版本检测
前端