react和vue 基礎使用對比

1.實現功能(ts)

0.基礎屬性使用
1.組件直接的通信
2.useState 動態修改值
3.循環遍歷功能
4.實現類型vue 的 watch ,filter,computed 屬性功能
5.實現類似vue2的生命周期
5.類型vue v-if功能的實現

2.文件結構圖

在這里插入圖片描述

3.具體代碼

interface.ts
import "./index.less";
import { message } from "antd";
import { useState, useEffect, useRef } from "react";
import { UserInfo } from "./interface";
import UserAge from "./components/UserAge"const UseComponent = () => {let [user, setUser] = useState<UserInfo>({ name: "張三", age: 5 });const [messageApi, contextHolder] = message.useMessage();let [show, setShow] = useState<boolean>(false);// 循環遍歷let [userList] = useState<UserInfo[]>([{ id: 1, name: "張三", age: 5 },{ id: 2, name: "李四", age: 10 },{ id: 3, name: "王五", age: 15 }]);const updateShow = () => {setShow(!show)}const updateAge = (updateAge: number, type: string = "add") => {let ageTemp: number = user.age;if (type === "add") {ageTemp = ageTemp + updateAge;} else if (type === "reduce") {ageTemp = ageTemp - updateAge;}if (ageTemp < 0) {messageApi.error("年齡不能小于0");ageTemp = 0;} else if (ageTemp > 100) {messageApi.error("年齡不能大于100");ageTemp = 100;}setUser(user => ({...user,age: ageTemp}));};const updateChild = (age: number) => {updateAge(age)}// 類型vue 的生命周期// Vue2 生命周期      | React 實現//---------------------------------------// beforeCreate     => 無直接等價(可用 useRef 模擬)// created          => useEffect 空依賴// beforeMount      => useLayoutEffect 空依賴// mounted          => useEffect 空依賴// beforeUpdate     => useLayoutEffect 無依賴// updated          => useEffect 無依賴// beforeDestroy    => useEffect 返回清理函數// destroyed        => useEffect 返回清理函數const UseComponent = () => {// beforeCreate 階段(組件初始化前)const initializedRef = useRef<boolean>(false);if (!initializedRef.current) {console.log("beforeCreate - 類似 Vue 的 beforeCreate");initializedRef.current = true;}// created 階段(組件初始化)useEffect(() => {console.log("created - 類似 Vue 的 created");}, []);// mounted 階段(DOM 掛載完成)useEffect(() => {console.log("mounted - 類似 Vue 的 mounted");}, []);// updated 階段(數據更新)useEffect(() => {console.log("updated - 類似 Vue 的 updated");});// beforeDestroy 階段(組件卸載前)useEffect(() => {return () => {console.log("beforeDestroy - 類似 Vue 的 beforeDestroy");};}, []);}UseComponent()return (<>{contextHolder}<div className="card content-box"><div>姓名:{user.name}</div><div>年齡:{user.age}</div><div className="flex-btn"><button className="add-btn" onClick={() => updateAge(1)}>年齡+1</button><button className="add-btn" onClick={() => updateAge(1, "reduce")}>年齡-1</button><button className="add-btn" onClick={() => updateShow()}>{!show ? "顯示" : '隱藏'}</button></div><div className="child"><div>我是子組件</div>{show && <UserAge user={user} updateChild={updateChild} />}</div><div>{userList.map((item, index) => {return (<div key={index}><div>姓名:{item.name}</div><div>年齡:{item.age}</div><div>------------------</div></div>)})}</div></div></>);
};export default UseComponent;
interface.ts
// 定義屬性 ?代表可填可不填
export interface UserInfo {id?: number;name: string;age: number;
}
UserAge.tsx
import React from "react";
import { UserInfo } from "../interface";interface Props {user: UserInfo;updateChild: (num: number) => void;
}const UserAge: React.FC<Props> = (props) => {//獲取父組件的參數// 類似 vue 的 watch React.useEffect(() => {console.log("子組件渲染", props.user);}, [props.user]);// 類似 vue 的 computedconst ageStatus: string = React.useMemo(() => {return props.user.age > 20 ? '中年' : '少年'}, [props.user.age]);// 類似vue 的 filter  也可以使用自定義hook的方式實現const ageFilter = (age: number) => {return age + "歲"}// 向父組件傳遞參數const updateFan = () => {props.updateChild(5);};return (<><div>我是子組件的age: {ageFilter(props.user.age)} {ageStatus}</div><button onClick={updateFan}>子組件控制父組件</button></>);
}export default UserAge;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73250.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習 常見優化器

一、基礎優化器 隨機梯度下降&#xff08;SGD&#xff09; ? 核心&#xff1a;?θJ(θ) η * ?θJ(θ) ? 特點&#xff1a;學習率固定&#xff0c;收斂路徑震蕩大 ? 適用場景&#xff1a;簡單凸優化問題 ? 改進方向&#xff1a;動量加速 二、動量系優化器 2. SGD with…

監控快手關注列表更新以及去視頻水印視頻

def printData(self):if len(self.UpdateDataList) > 0:self.UpdateDataList sorted(self.UpdateDataList, keylambda x: x[minutes]) # 先更新的在前sucess 0for index, video in enumerate(self.UpdateDataList):minutes video[minutes]if minutes > self.updateIn…

前端 JavaScript 中快速發起多個下載請求時,解決瀏覽器的并發下載連接限制

為什么會漏掉鏈接&#xff1f; 當你在前端 JavaScript 中快速發起多個下載請求時&#xff0c;瀏覽器可能無法同時處理所有請求&#xff0c;導致一些請求被忽略。這通常與瀏覽器的并發連接限制有關&#xff0c;例如 Chrome 可能限制每秒下載 10 個文件。 如何避免漏掉鏈接&…

如何修改桌面圖標——文件夾圖標(Windows 10)

修改文件夾圖標 EX&#xff1a;新建文件夾&#xff0c;程序創建文件夾等 修改桌面文件夾圖標&#xff0c;打開右鍵菜單功能項&#xff0c;點擊“屬性” 在屬性窗口頁面找到并單擊自定義&#xff0c;然后點擊“更改圖標” 從列表中選擇喜歡的圖標&#xff0c;或點擊瀏覽選擇個…

LiveCommunicationKit OC 實現

一、實現效果: ? LiveCommunicationKit?是蘋果公司在iOS 17.4、watchOS 10.4和visionOS 1.1中引入的一個新框架,旨在優化VoIP通話的交互體驗。該框架提供了與

基于Bert模型的增量微調3-使用csv文件訓練

我們使用weibo評價數據&#xff0c;8分類的csv格式數據集。 一、創建數據集合 使用csv格式的數據作為數據集。 1、創建MydataCSV.py from torch.utils.data import Dataset from datasets import load_datasetclass MyDataset(Dataset):#初始化數據集def __init__(self, s…

flowable新增或修改單個任務的歷史變量

簡介 場景&#xff1a;對歷史任務進行關注&#xff0c;所以需要修改流程歷史任務的本地變量 方法包含2個類 1&#xff09;核心方法&#xff0c;flowable command類&#xff1a;HistoricTaskSingleVariableUpdateCmd 2&#xff09;執行command類&#xff1a;BpmProcessCommandS…

Netty基礎—4.NIO的使用簡介一

大綱 1.Buffer緩沖區 2.Channel通道 3.BIO編程 4.偽異步IO編程 5.改造程序以支持長連接 6.NIO三大核心組件 7.NIO服務端的創建流程 8.NIO客戶端的創建流程 9.NIO優點總結 10.NIO問題總結 1.Buffer緩沖區 (1)Buffer緩沖區的作用 (2)Buffer緩沖區的4個核心概念 (3)使…

python元組(被捆綁的列表)

元組&#xff08;tuple&#xff09; 1.元組一旦形成就不可更改,元組所指向的內存單元中內容不變 定義&#xff1a;定義元組使用小括號&#xff0c;并且使用逗號進行隔開&#xff0c;數據可以是不同的數據類型 定義元組自變量&#xff08;元素&#xff0c;元素&#xff0c;元素…

輸入:0.5元/百萬tokens(緩存命中)或2元(未命中) 輸出:8元/百萬tokens

這句話描述了一種 定價模型&#xff0c;通常用于云計算、API 服務或數據處理服務中&#xff0c;根據資源使用情況&#xff08;如緩存命中與否&#xff09;來收費。以下是對這句話的詳細解釋&#xff1a; 1. 關鍵術語解釋 Tokens&#xff1a;在自然語言處理&#xff08;NLP&…

計算機視覺算法實戰——駕駛員玩手機檢測(主頁有源碼)

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ? ??? 1. 領域簡介&#xff1a;玩手機檢測的重要性與技術挑戰 駕駛員玩手機檢測是智能交通安全領域的核心課題。根據NHTSA數據&#xff0…

Java糊涂包(Hutool)的安裝教程并進行網絡爬蟲

Hutool的使用教程 1&#xff1a;在官網下載jar模塊文件 Central Repository: cn/hutool/hutool-all/5.8.26https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.26/ 下載后綴只用jar的文件 2&#xff1a;復制并到idea當中&#xff0c;右鍵這個模塊點擊增加到庫 3&…

深度學習項目--基于DenseNet網絡的“乳腺癌圖像識別”,準確率090%+,pytorch復現

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 前言 如果說最經典的神經網絡&#xff0c;ResNet肯定是一個&#xff0c;從ResNet發布后&#xff0c;很多人做了修改&#xff0c;denseNet網絡無疑是最成功的…

優化用戶體驗:關鍵 Web 性能指標的獲取、分析、優化方法

前言 在當今互聯網高速發展的時代用戶對于網頁的加載速度和響應時間越來越敏感。一個性能表現不佳的網頁不僅會影響用戶體驗&#xff0c;還可能導致用戶流失。 因此&#xff0c;了解和優化網頁性能指標是每個開發者的必修課。今天我們就來聊聊常見的網頁性能指標以及如何獲取這…

vs code配置 c/C++

1、下載VSCode Visual Studio Code - Code Editing. Redefined 安裝目錄可改 勾選創建桌面快捷方式 安裝即可 2、漢化VSCode 點擊確定 下載MinGW 由于vsCode 只是一個編輯器&#xff0c;他沒有自帶編譯器&#xff0c;所以需要下載一個編譯器"MinGW". https://…

Kotlin關鍵字`when`的詳細用法

Kotlin關鍵字when的詳細用法 在Kotlin中&#xff0c;when是一個強大的控制流語句&#xff0c;相當于其他語言中的switch語句&#xff0c;但更加強大且靈活。本文將詳細講解when的用法及其常見場景&#xff0c;并與Java的switch語句進行對比。 一、基本語法 基本的when語法如…

MFCday01、模式對話框

對話框類和應用程序類。 MFC中 Combo Box List Box List Control三種列表控件&#xff0c;日期控件Date Time Picker

接口測試筆記

4、接口測試自動化 接口自動化概述 HttpClient HttpClient開發過程 創建Java工程 新建libs庫目錄 HttpClient 工具下載及引入 https://hc.apache.org/index.html工程中引入jar包 Get請求 HttpGet方法---發起Get請求 創建HttpClient對象 CloseableHttpClient httpclient …

查找sql中涉及的表名稱

import pandas as pd import datetime todaystr(datetime.date.today())filepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/sql表引用提取/ file101試聽課明細.txt newfilefile1.title().split(.)[0]with open(filepathfile1,r) as file:contentfile.read().lower…

如何在Ubuntu上構建編譯LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC&#xff0c;奈何核心/線程太少了。最近想在 Ubuntu 上搞搞&#xff0c;但是 snap 安裝的 ISPC不知道為什么只能單核&#xff0c;很奇怪&#xff0c;就想著編譯一下&#xff0c;需要 Clang 和 LLVM。但是 Ubuntu 很搞&#xff0c;他的很多軟件版本是…