从 Vue 到 React:理解作用与副作用

作用 VS 副作用

响应式作用
响应式作用是 Vue 响应式系统的一部分,它指的是跟踪函数的依赖关系,并在它们的值发生变化时重新运行该函数的过程。watchEffect 是最直接的创建作用的方式(如 watchcomputed)。

副作用
副作用(side effect)用于描述超出其局部作用域的操作或函数。当描述一个函数有副作用时,意味着该函数除了返回一个值外,还执行了函数外可以观察到的操作,如更新状态中的值或触发网络请求。该术语通常描述渲染或计算属性。最佳实践是渲染不应该有副作用,同样,计算属性的 getter 函数不应该有副作用。

在函数式编程中,纯函数是指其输出仅依赖于输入参数,没有任何副作用。而副作用是指函数执行过程中对外部状态的修改或者对外部世界的影响。这个概念被引入到响应式框架设计中,用于明确区分哪些仅仅是计算的数据变化的逻辑(作用)和那些影响外部状态的操作。

Vue 中的副作用
类似于函数式编程的副作用操作,涉及到对外部状态的修改或外部行为的触发。副作用并不是负面的影响。区分:纯粹的计算(作用)和涉及到外部状态或行为(副作用)。利用生命周期钩子 onMountedonUnmounted 管理副作用,确保在加载和卸载时清理外部资源。使用组合式 API,如 watchEffectwatchcomputed 创建作用,并在需要时处理副作用。

React 中的副作用
React 中的副作用是指在组件渲染过程中执行的操作,这些操作可能会影响到组件之外的状态或行为。常见的副作用包括数据获取、订阅、手动更改 DOM 以及记录日志等。React 通过 useEffect Hook 来处理副作用。useEffect 接受一个函数,该函数会在组件渲染后执行,可以在函数中返回一个清理函数,以便在组件卸载或副作用重新执行前清理资源。

React 提供了 “严格模式”,在严格模式下开发时,它将会调用每个组件函数两次(但是丢弃第二个结果)。通过重复调用组件函数,严格模式有助于找到违反这些规则的组件

如需引入严格模式,你可以用 <React.StrictMode> 包裹根组件。

哪些地方可能引发副作用

函数式编程在很大程度上依赖于纯函数,但某些事物在特定情况下不得不发生改变。这是编程的要义!

这些变动包括更新屏幕启动动画更改数据等,它们被称为 副作用。它们是 “额外” 发生的事情,与渲染过程无关。

在 React 中,副作用通常属于 事件处理程序。事件处理程序是 React 在你执行某些操作(如单击按钮)时运行的函数。即使事件处理程序是在你的组件内部定义的,它们也不会在渲染期间运行!因此事件处理程序无需是纯函数。

如果你用尽一切办法,仍无法为副作用找到合适的事件处理程序,你还可以调用组件中的 useEffect 方法将其附加到返回的 JSX 中。这会告诉 React 在渲染结束后执行它。然而,这种方法应该是你最后的手段。

import React, { useState, useEffect } from 'react';function ExampleComponent() {const [count, setCount] = useState(0);useEffect(() => {// 副作用:更新文档标题document.title = `You clicked ${count} times`;// 清理函数:在组件卸载或副作用重新执行前清理return () => {document.title = 'React App';};}, [count]); // 仅在 count 变化时执行副作用return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}

React VS Vue

作用与副作用对比

Vue
  • 作用
    • Vue 的响应式系统会自动跟踪依赖关系,并在依赖变化时重新计算。
    • 使用 watchEffectwatchcomputed 来创建作用。
  • 副作用
    • 副作用是指对外部状态的修改或外部行为的触发。
    • 使用生命周期钩子如 onMountedonUnmounted 来管理副作用,确保在加载和卸载时清理外部资源。
    • 组合式 API(如 watchEffectwatchcomputed)可以处理副作用。
React
  • 作用
    • React 没有内置的响应式系统,依赖于组件的状态和属性来触发重新渲染。
  • 副作用
    • 副作用是指在组件渲染过程中执行的操作,可能会影响组件之外的状态或行为。
    • 使用 useEffect Hook 来处理副作用。
    • useEffect 接受一个函数,该函数会在组件渲染后执行,可以返回一个清理函数,以便在组件卸载或副作用重新执行前清理资源。

以上 →🐒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a = b c 的含义

简单一句话&#xff1a; result condition && value; condition 为真取 value的值&#xff0c;condition为假就取condition的值&#xff0c;真取后假取前 // 示例 1: b 为真值 let b 1; let c 2; let a b && c; console.log(a); // 输出: 2// 示例 2: b 为…

【大模型系列】llama.cpp本地运行大模型

上一篇链接: 【大模型系列】使用ollama本地运行千问2.5模型 我们讲了ollama本地运行大模型&#xff0c;这里我们介绍另一种本地运行大模型的方法&#xff1a;llamacpp 软件下载 下载地址&#xff1a;https://github.com/ggml-org/llama.cpp/releases 下载cpu版本的llamacpp&a…

PyQt基础——简单的图形化界面(窗口)

一、代码展示 import sysfrom PyQt6.QtGui import QPixmap from PyQt6.QtWidgets import QWidget, QApplication, QLabel, QLineEdit, QPushButton from PyQt6 import uic from PyQt6.QtCore import Qt# 封装一个我的窗口类 class MyWidget(QWidget):def __init__(self):supe…

泰山派开发之—Ubuntu24.04下Linux开发环境搭建

简介 最近翻到了吃灰已久的泰山派&#xff0c;是刚出来的时候用优惠券买的&#xff0c;当时价格挺便宜的&#xff0c;最近给它翻出来了&#xff0c;打算试试做个项目。买的泰山派容量是2G16G&#xff0c;SOC芯片使用的是RK3566&#xff0c;搭载1TOP算力的NPU&#xff0c;并且具…

HTTP 协议中常见的错误状态码(详细介绍)

以下是 HTTP 协议中常见的错误状态码及其原因的总结&#xff0c;按错误类型分类整理&#xff1a; 4xx 客户端错误 400 Bad Request 原因&#xff1a;请求格式错误&#xff0c;服务器无法解析。常见场景&#xff1a; 请求头或请求体语法错误&#xff08;如 JSON/XML 格式错误…

kkFileView文件预览组件部署说明

kkFileView组件部署流程指南 在数字化办公与文件管理场景中&#xff0c;在线文件预览功能极为关键。kkFileView作为一款优秀的开源在线文件预览组件&#xff0c;支持多种格式文件的预览&#xff0c;为企业和开发者提供了便捷的解决方案。下面将详细介绍其部署步骤。 一、前期准…

[React Native]Stack、Tab和Drawer导航器详解

对于StackNavigator&#xff0c;网页[1]提到它用于页面间的层级跳转&#xff0c;使用栈结构管理页面。网页[4]和[8]详细说明了navigationOptions的配置&#xff0c;比如标题、头部样式等。网页[3]展示了如何在Stack中嵌入Tab导航&#xff0c;这可以作为组合使用的例子。 TabNa…

激光雷达产业观察--速腾聚创发展脉络2025.3.14

一.发展历程 1.1 企业创立 速腾聚创的创立可追溯至2014年8月28日&#xff0c;这家充满活力的高科技企业诞生于中国深圳。公司创始人邱纯鑫是一位富有远见的企业家&#xff0c;他的创业之路充满了创新精神和技术洞察力。 邱纯鑫的创业灵感源于他在哈尔滨工业大学深圳校区的学…

Kubernetes 网络方案全解析:Flannel、Calico 与 Cilium 对比与选择

文章目录 Kubernetes 网络方案全解析&#xff1a;Flannel、Calico 与 Cilium 对比与选择Flannel —— 轻量级基础网络简介核心特性适用场景 Calico —— 高性能与安全兼备的成熟方案简介核心特性适用场景 Cilium —— 基于 eBPF 的下一代网络方案简介核心特性适用场景 深入对比…

OpenCV实现图像分割与无缝合并

一、图像分割核心方法 1、阈值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定阈值分割imwrite("binary.…

计算机视觉算法实战——驾驶员分心检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域简介&#xff1a;驾驶员分心检测的意义与挑战 驾驶员分心检测是智能驾驶安全领域的重要研究方向。据统计&#xff0c;全球每…

scoop退回软件版本的方法

title: scoop退回软件版本的方法 date: 2025-3-11 23:53:00 tags: 其他 前言 在软件更新后&#xff0c;如果出现了很影响使用体验的问题&#xff0c;那么可以把软件先退回以前的版本进行使用&#xff0c; 但是scoop本身并没有提供直接让软件回退版本的功能&#xff0c;因此…

OpenRewrite配方之import语句的顺序——org.openrewrite.java.OrderImports

org.openrewrite.java.OrderImports 是 OpenRewrite 工具库中的一个重要规则(Recipe),专为 Java 项目设计,用于自动化调整 import 语句的顺序,使其符合预定义的代码规范。从而提高代码的一致性和可读性。 核心功能 排序规则: 静态导入优先:默认将静态导入(import stati…

搭建活动报名新神器

用户痛点 以往&#xff0c;依靠传统的手动报名方式&#xff0c;像 Excel 表格登记或者邮件收集信息&#xff0c;在活动规模较小时或许还能应付。可一旦参与人数增多&#xff0c;问题就接踵而至&#xff1a;信息分散在不同文档和邮件中&#xff0c;难以集中管理&#xff1b;人工…

MySQL增删改查操作 -- CRUD

个人主页&#xff1a;顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例&#xff1a; 注意点&#xff1a; 3.Retrieve检索 使用示例&#xff1a; 注意点&#xff1a; 4.where条件查询 前置知识&#xff1a;-- 运算符 比较运算符 使用示例&#xff1a; 注意点&#xf…

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…

STM32上实现简化版的AUTOSAR DEM模块

文章目录 摘要摘要 在一些可以不使用AUTOSAR的项目中,往往也有故障检测和DTC存储的需求,开发一套类似于AUTOSAR DEM模块的软件代码,能够满足DTC的检出和存储,使用FalshDB代替Nvm模块,轻松构建持久化存储,如果你也有这样的需求,请阅读本篇,希望能够帮到你。 /*********…

html css网页制作成品——糖果屋网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

Postman下载安装及简单入门

一&#xff0e;Postman简介 Postman是一款API测试工具&#xff0c;可以帮助开发、测试人员发送HTTP请求&#xff0c;与各种API进行交互&#xff0c;并分析响应 二&#xff0e;下载与安装 访问Postman官网&#xff08;https://www.postman.com/&#xff09;&#xff0c;下载适…

免费blender模型网站推荐

前言:博主最近在玩blender建模,有时为了节省时间想用现成的模型,网上零零碎碎的大多多需要付费,自己找了些好用且免费的blender素材库网站,希望对你有帮助 综合资源网站 Blender布的 网址:https://blenderco.cn/ 简介:提供上万个Blender模型、插件、贴图资源,更新频率高…