react中父子數據流動和事件互相調用(和vue做比較)

前言:

????????react中父子數據流動和事件互相調用,父組件給子組件數據,父組件調用子組件的事件,同理,子也可以調用父的數據和傳值。

react是單向數據流,具體使用跟vue是不同的。

1、父組件的數據傳給子組件,使用props,也就是{}

可以看到vue的數據綁定是v-bind,簡寫{{}}

react的數據也是props傳值接收,簡寫就是{}

//引入子組件
import { Line as LineEchart } from "@/components/echarts";//定義變量,一種是hook的useState,另一種是直接定義變量
const [dealOpt, setDeal] = useState({});
const echartStyle = {height: 50,
};// option綁定我們的變量,用{}綁定變量
<LineEchart option={dealOpt} style={echartStyle} />
//子組件內部定義方法的時候,參數直接寫在方法上面function Line({ theme = "light", style = {}, option = {} }) {....
}// memo是提高性能的hook函數
export default memo(Line, (prev, next) => prev.option === next.option);

2、父組件調用子組件內部的函數方法

通過ref來調用,具體要用到useRef?+?forwardRef?+?useImperativeHandle

vue的也是ref,不過直接用refs調用子級方法

父級組件內部,用ref來調用
import { useRef } from 'react'; //useRef 是ref的方法
import Child from './Child'; //引入子組件// 函數內部
// 默認定義ref,然后綁定到dom元素const childRef = useRef();const triggerChildMethod = () => {childRef.current.childMethod(); // 調用子組件方法,childRef.current
};return (<div><button onClick={triggerChildMethod}>點我觸發事件</button><Child ref={childRef} /></div>
);
對應的子組件內部,forwardRef+useImperativeHandle?
import { forwardRef, useImperativeHandle } from 'react';const Child = forwardRef((props, ref) => {useImperativeHandle(ref, () => ({childMethod: () => {console.log("Child method called!");},}));return <div>Child Component</div>;
});

3、子給父傳事件

vue的話,就是用$emit/defindEmit的方法

react的話,用回調函數,也是用{}來綁定

父級內部接收
import { useState } from 'react';
//用hook里面的useState定義變量childData
const [childData, setChildData] = useState('');// 定義父的事件
const handleDataFromChild = (data) => {setChildData(data); // 接收子組件的數據
};//onSendData是子給父的方法名return (<Child onSendData={handleDataFromChild} />});
子級發送
const sendData = () => {onSendData("Hello from Child"); // 調用父組件的回調函數,onSendData
};return <button onClick={sendData}>點擊</button>;

4、跨層調用,父給子孫任意一級傳值,或孫改父的數據,

vue的話,vuex或者eventBus

react用hook里面的createContext

父組件:
// 1. 創建 Context
import { createContext, useContext, useState } from 'react';const DataContext = createContext();// 2. 父組件提供數據
function Parent() {const [data, setData] = useState("我是默認數據");return (<DataContext.Provider value={{ data, setData }}>//Child 代表子組件,至于子嵌孫不用DataContext.Provider<Child /></DataContext.Provider>);
}
孫組件:
//data是我們的默認值,setData 可以修改這個默認值的事件
const { data, setData } = useContext(DataContext);return (<button onClick={() => setData("Updated Data")}>更改父內容: {data}</button>
);

5、redux來調用不同層級組件的事件與數據

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

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

相關文章

杰理手表-增加提示音-提示音音量調整--使用提示音

本章節非常詳細的介紹這個提示音的增加-調整-使用&#xff0c;其余耳機包之類的也是差不多的&#xff01;&#xff01; 目錄 1.添加自己需要用的提示音 2.根據添加的提示音-代碼中配置 1.在tone_player.h中枚舉里添加本次提示音的名稱 2.把定義好的提示音放到tone_player.…

數據庫的基本操作(視圖,存儲,觸發器)

1、視圖&#xff08;1&#xff09;什么是視圖視圖是虛擬表&#xff0c;是基于查詢結果的可視化表&#xff0c;視圖的作用有&#xff1a;①簡化復雜查詢 ②限制數據訪問 ③提供數據獨立性 ④匯總數據&#xff08;2&#xff09;怎么創建視圖創建視圖 CREATE OR REPLACE VIEW 視圖…

Pytest項目_day13(usefixture方法、params、ids)

usefixture 我們還可以使用mark.usefixtures來調用fixture 這樣相比在傳入參數處調用fixture&#xff0c;會更加直接 但是如果我們在一個測試用例中使用了多個usefixtures&#xff0c;那么測試用例會先調用離他最近的那個fixtureparams fixture中還可以帶參數 當我們用request.…

Rust 異步生態實戰:Tokio 調度、Pin/Unpin 與零拷貝 I/O

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

通用 maven 私服 settings.xml 多源配置文件(多個倉庫優先級配置)

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

AT F-Intervals 題解

簡化題意&#xff1a; 有 nnn 個區間&#xff0c;保證所有區間同時覆蓋一個點&#xff0c;每次將區間平移一個單位&#xff0c;問使得區間兩兩不交的最小操作數&#xff08;端點處可重疊&#xff09;。n≤5000。l,r≤231?1n\leq 5000。l,r\leq 2^{31}-1n≤5000。l,r≤231?1。…

《飛算Java AI:從安裝到需求轉實戰項目詳細教學》

前引&#xff1a;在當今快速發展的技術環境中&#xff0c;人工智能&#xff08;AI&#xff09;與編程語言的結合為開發者提供了前所未有的便利。飛算Java AI作為一款智能化編程工具&#xff0c;能夠顯著提升Java開發效率&#xff0c;減少重復性工作&#xff0c;并幫助開發者更專…

6深度學習Pytorch-神經網絡--過擬合欠擬合問題解決(Dropout、正則化、早停法、數據增強)、批量標準化

過擬合、欠擬合 在機器學習和深度學習中&#xff0c;過擬合&#xff08;Overfitting&#xff09;和欠擬合&#xff08;Underfitting&#xff09;是模型訓練過程中常見的兩種問題&#xff0c;直接影響模型的泛化能力&#xff08;即對未見過的數據的預測能力&#xff09;。 1. 欠…

新手向:Python編寫簡易翻譯工具

Python 編寫簡易翻譯工具&#xff1a;從零開始入門指南對于剛接觸編程的新手來說&#xff0c;編寫一個實用的工具是快速入門的好方法。本文將詳細介紹如何用 Python 編寫一個簡易的翻譯工具&#xff0c;幫助理解基礎編程概念和實際應用。無需任何編程基礎&#xff0c;只需按照步…

爬蟲與數據分析結和

任務描述 爬取目標&#xff1a;高三網中國大學排名一覽表&#xff0c;網址為 2021中國的大學排名一覽表_高三網。爬取內容&#xff1a;學校名稱、總分、全國排名、星級排名、辦學層級。數據存儲&#xff1a;爬取后的數據保存在 CSV 文件中。 代碼實現&#xff08;爬取&#xff…

linux下安裝php

1.php官網下載所需要的php版本 下載php 2.將下載好的壓縮包上傳至linux服務器&#xff0c;解壓并配置 tar -xzvf php-8.4.11.tar.gz cd php-8.4.11 ./configure --prefix/home/admintest/php/php-8.4.11 # 配置安裝路徑和選項 make sudo make install3.使用make命令編譯完成…

nurbs曲線的matlab

基于MATLAB的NURBS曲線生成與可視化程序 %% NURBS曲線生成與可視化 clc; clear; close all;%% 基本參數設置 degree 3; % 曲線階數 (degree k-1, k為控制點數) numCtrlPts 6; % 控制點數量 weights ones(1, numCtrlPts); % 權重向量&#xff08;可調整&#…

AWS WAF防護機制深度研究:多模式驗證與繞過技術解析

AWS WAF防護機制深度研究&#xff1a;多模式驗證與繞過技術解析 技術概述 AWS WAF&#xff08;Web Application Firewall&#xff09;作為亞馬遜云服務的核心安全組件&#xff0c;為Web應用提供了多層次的防護機制。該系統基于先進的機器學習算法和規則引擎&#xff0c;能夠實…

嵌入式 - Linux軟件編程:文件IO

一、概念標準IO是有緩存的IO&#xff0c;文件IO沒有緩存&#xff0c;適合于通信、硬件設備操作標準IO是庫函數&#xff0c;文件IO是系統調用文件 IO 與標準 IO&#xff08;基于 C 庫函數的 IO&#xff09;是 Linux 中兩種主要的 IO 方式&#xff0c;二者的核心差異如下&#xf…

ESP32 MQTT對接EMQX本地服務器

文章目錄一、搭建EMQX本地MQTT服務器1.1 下載1.2 使用二、MQTT.fx安裝使用2.1 破解及安裝2.2 客戶端界面說明2.3 與 WebSocket 客戶端互發消息2.3.1 使用MQTT.fx連接到EMQX本地服務器1.General設置2.User Credentials設置3.進行連接2.3.2 MQTT.fx發布和訂閱主題1.發布主題2.訂閱…

【Node.js從 0 到 1:入門實戰與項目驅動】2.2 驗證安裝(`node -v`、`npm -v`命令使用)

文章目錄 第 2 章:環境搭建 —— 準備你的開發工具 2.2 驗證安裝(`node -v`、`npm -v`命令使用) 一、基礎驗證命令解析 二、基礎驗證場景案例 案例 1:首次安裝后的基礎驗證 案例 2:檢查版本兼容性 三、進階場景案例 案例 3:在腳本中動態獲取 Node.js 版本 案例 4:在 npm…

【虛擬機】VMwareWorkstation17Pro安裝步驟

哈嘍&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 工作中時常會遇到各種各樣的系統&#xff0c; 需要做各種測試&#xff0c; 比如要驗證某個軟件在某個系統版本上是否適配&#xff0c; 這時候將自己的電腦系統換成要測試的系統就會比較麻煩。 這時候使用虛擬機就…

C語言庫中的字符函數

目錄 求字符串長度 認識strlen 自主實現strlen 字符串拷貝 認識strcpy 自主實現strcpy strncpy 字符串拼接 認識strcat 自主實現sracat strncat 字符串大小比較 認識strcmp 自主實現strcmp strncmp 字符串中尋找子字符串 認識strstr 自主實現strstr 根據符號…

學習日志31 python

1 x, y y, x 是合法的,這是Python的特色語法x, y y, x 是 Python 中一種非常簡潔且實用的特色語法&#xff0c;用于交換兩個變量的值。這種語法的優勢在于&#xff1a;無需額外的臨時變量即可完成交換操作代碼簡潔易讀&#xff0c;一眼就能理解其目的執行效率高&#xff0c;在…

Mac配置服務器工具Royal TSX

Royal TSX是mac上類似xshell的工具&#xff0c;可以遠程連接服務器、連接ftp等 下載Royal TSX 官網&#xff1a;Royal TSX 下載插件 在設置中的插件市場plugins中下載需要的插件 例如 遠程shell插件&#xff1a;Terminal ftp插件&#xff1a;File Transfer 新建一個文檔 開…