当前位置: 首页 > news >正文

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

Effect(useEffect Hook)

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

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会重新运行  //如果我们没有传递依赖项数组(即只写useEffect(() => {...})),那么每次组件渲染时,useEffect都会执行。同时,当组件卸载时,清理函数会被执行。// 一个函数,用于在点击按钮时增加计数  const handleClick = () => {  setCount(count + 1);  };  return (  <div>  <p>You clicked {count} times</p>  <button onClick={handleClick}>Click me</button>  </div>  );  
}  export default ExampleComponent;
http://www.lryc.cn/news/342119.html

相关文章:

  • 网卡的了解
  • SSM框架目录
  • MATLAB实现杜拉德公式和凯夫公式的计算固液混合料浆临界流速
  • Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。
  • 【DevOps】玩转 Google Cloud:项目切换与 K8s 集群访问
  • 大模型_DISC-MedLLM基于Baichuan-13B-Base医疗健康对话
  • 开源模型 Prometheus 2 能够评估其他语言模型,其效果几乎与 GPT-4 相当
  • 【Java】HOT100 贪心算法
  • 绝地求生:PUBG杜卡迪联名进入倒计时3天!
  • 【论文阅读】Learning Texture Transformer Network for Image Super-Resolution
  • 读字库写FM24C04
  • boost::asio::ip::tcp::socket set_option
  • 华为鸿蒙HarmonyOS应用开发者高级认证答案
  • ElasticSearch 与 OpenSearch:拉开性能差距
  • Java构造器
  • TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤
  • 【经典算法】LeetCode 72. 编辑距离(Java/C/Python3/Go实现含注释说明,中等)
  • webstorm 常用插件
  • clang:在 Win10 上编译 MIDI 音乐程序(二)
  • 【redis】Redis数据类型(三)List类型
  • Java面试题:多线程2
  • T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)
  • 【Numpy】一文向您详细介绍 np.linspace()
  • VMware虚拟网卡网络适配器出现黄色感叹号
  • 论生命价值
  • 基于Springboot的民航网上订票系统(有报告)。Javaee项目,springboot项目。
  • ubuntu开启message文件
  • ISIS的基本概念
  • Vue 工程化开发入门
  • 车牌号识别系统:PyQT5+QT Designe+crnn/PaddleOCR+YOLO+OpenCV矫正算法。