從 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.pswp.cn/bicheng/73281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73281.shtml
英文地址,請注明出處:http://en.pswp.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模型、插件、貼圖資源,更新頻率高…