最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React數(shù)據(jù)傳遞的六種方式詳解

 更新時(shí)間:2025年08月14日 10:19:22   作者:江城開(kāi)朗的豌豆  
在 React 應(yīng)用程序中,數(shù)據(jù)傳遞是非常重要的,它允許我們?cè)诮M件之間共享信息和狀態(tài),從而構(gòu)建出復(fù)雜的用戶界面,本文將深入探討React數(shù)據(jù)傳遞的六種方式,需要的朋友可以參考下

引言

“在 React 開(kāi)發(fā)中,組件之間的數(shù)據(jù)傳遞就像現(xiàn)實(shí)中的聊天——父子組件可以直接對(duì)話,兄弟組件需要‘中介’,而跨層級(jí)組件可能得靠‘廣播’。今天,我就結(jié)合 6 年實(shí)戰(zhàn)經(jīng)驗(yàn),帶大家解鎖 React 組件通信的 6 種姿勢(shì),讓你徹底告別‘數(shù)據(jù)孤島’!”

1. 父子組件:props 直傳(最基礎(chǔ))

場(chǎng)景:父組件向子組件傳遞數(shù)據(jù)或函數(shù)。

// 父組件
const Parent = () => {
  const [message, setMessage] = useState("Hello from Parent!");

  return <Child greeting={message} />;
};

// 子組件
const Child = ({ greeting }) => {
  return <h1>{greeting}</h1>; // 直接使用父組件傳遞的 props
};

我的吐槽
“這就像老爸直接給兒子零花錢,簡(jiǎn)單粗暴,但兒子沒(méi)法主動(dòng)要錢(子組件不能反向傳數(shù)據(jù))。”

2. 子傳父:回調(diào)函數(shù)(Callback)

場(chǎng)景:子組件通過(guò)父組件傳遞的函數(shù)“逆向”通信。

// 父組件
const Parent = () => {
  const handleChildClick = (data) => {
    console.log("子組件說(shuō):", data); // 接收子組件數(shù)據(jù)
  };

  return <Child onClick={handleChildClick} />;
};

// 子組件
const Child = ({ onClick }) => {
  return <button onClick={() => onClick("I'm Child!")}>點(diǎn)我傳數(shù)據(jù)</button>;
};

我的心得
“這種方式適合簡(jiǎn)單的交互,比如表單提交。但如果層級(jí)太深,props 會(huì)變成‘擊鼓傳花’,代碼容易變亂。”

3. 兄弟組件:狀態(tài)提升(Lifting State Up)

場(chǎng)景:兩個(gè)兄弟組件共享父組件的狀態(tài)。

// 父組件
const Parent = () => {
  const [count, setCount] = useState(0);

  return (
    <>
      <SiblingA count={count} />
      <SiblingB onUpdate={() => setCount(count + 1)} />
    </>
  );
};

// 兄弟組件 A(顯示數(shù)據(jù))
const SiblingA = ({ count }) => <div>當(dāng)前計(jì)數(shù):{count}</div>;

// 兄弟組件 B(修改數(shù)據(jù))
const SiblingB = ({ onUpdate }) => <button onClick={onUpdate}>+1</button>;

我的比喻
“這就像兩兄弟共用老爸的支付寶賬號(hào)——花錢(SiblingB)和查余額(SiblingA)都得通過(guò)老爸(Parent)。”

4. 跨層級(jí)組件:Context API

場(chǎng)景:避免多層 props 透?jìng)?,?shí)現(xiàn)“隔代通信”。

// 創(chuàng)建 Context
const ThemeContext = createContext("light");

// 祖父組件
const Grandparent = () => {
  return (
    <ThemeContext.Provider value="dark">
      <Parent />
    </ThemeContext.Provider>
  );
};

// 孫子組件(跳過(guò) Parent)
const Grandchild = () => {
  const theme = useContext(ThemeContext);
  return <div>當(dāng)前主題:{theme}</div>; // 直接拿到祖父的數(shù)據(jù)
};

我的提醒
“Context 適合全局主題、用戶信息等低頻更新數(shù)據(jù)。頻繁更新的值用 Context 可能導(dǎo)致性能問(wèn)題!”

5. 任意組件:事件總線(Event Bus)

場(chǎng)景:完全不相關(guān)的組件間通信,類似“廣播”。

// 事件總線(可以用 mitt 或自定義)
const eventBus = new EventEmitter();

// 組件 A(發(fā)布事件)
const ComponentA = () => {
  const emitEvent = () => eventBus.emit("alert", "我是組件A發(fā)的消息!");
  return <button onClick={emitEvent}>發(fā)布事件</button>;
};

// 組件 B(訂閱事件)
const ComponentB = () => {
  const [message, setMessage] = useState("");

  useEffect(() => {
    eventBus.on("alert", setMessage);
    return () => eventBus.off("alert", setMessage);
  }, []);

  return <div>收到消息:{message}</div>;
};

我的警告
“事件總線雖然靈活,但容易導(dǎo)致代碼難以維護(hù)。慎用,除非你真的需要‘廣播’!”

6. 全局狀態(tài)管理:Redux / Zustand

場(chǎng)景:復(fù)雜應(yīng)用需要集中管理狀態(tài)。

// 以 Zustand 為例
import { create } from "zustand";

// 創(chuàng)建 store
const useStore = create((set) => ({
  user: null,
  login: (name) => set({ user: name }),
}));

// 組件 A(修改狀態(tài))
const ComponentA = () => {
  const login = useStore((state) => state.login);
  return <button onClick={() => login("小楊")}>登錄</button>;
};

// 組件 B(讀取狀態(tài))
const ComponentB = () => {
  const user = useStore((state) => state.user);
  return <div>當(dāng)前用戶:{user || "未登錄"}</div>;
};

我的選擇
“Redux 適合大型項(xiàng)目,但學(xué)習(xí)成本高。個(gè)人更推薦 Zustand,API 簡(jiǎn)單,夠用!”

寫在最后?

到此這篇關(guān)于React數(shù)據(jù)傳遞的六種方式詳解的文章就介紹到這了,更多相關(guān)React數(shù)據(jù)傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React組件通信實(shí)現(xiàn)方式詳解

    React組件通信實(shí)現(xiàn)方式詳解

    這篇文章主要介紹了React組件通信,在開(kāi)發(fā)中組件通信是React中的一個(gè)重要的知識(shí)點(diǎn),本文通過(guò)實(shí)例代碼給大家講解react中常用的父子、跨組件通信的方法,需要的朋友可以參考下
    2023-03-03
  • React錯(cuò)誤的習(xí)慣用法分析詳解

    React錯(cuò)誤的習(xí)慣用法分析詳解

    這篇文章主要為大家介紹了React錯(cuò)誤用法習(xí)慣分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 使用react render props實(shí)現(xiàn)倒計(jì)時(shí)的示例代碼

    使用react render props實(shí)現(xiàn)倒計(jì)時(shí)的示例代碼

    這篇文章主要介紹了使用react render props實(shí)現(xiàn)倒計(jì)時(shí)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • React?Hooks中?useRef和useImperativeHandle的使用方式

    React?Hooks中?useRef和useImperativeHandle的使用方式

    這篇文章主要介紹了React?Hooks中?useRef和useImperativeHandle的使用方式,文中說(shuō)明了useRef和useCallback一起使用,?可以解決閉包陷阱的問(wèn)題,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • React-Native 組件之 Modal的使用詳解

    React-Native 組件之 Modal的使用詳解

    本篇文章主要介紹了React-Native 組件之 Modal的使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 在react中對(duì)less實(shí)現(xiàn)scoped配置方式

    在react中對(duì)less實(shí)現(xiàn)scoped配置方式

    這篇文章主要介紹了在react中對(duì)less實(shí)現(xiàn)scoped配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React和Vue實(shí)現(xiàn)文件下載進(jìn)度條

    React和Vue實(shí)現(xiàn)文件下載進(jìn)度條

    本文主要介紹了React和Vue實(shí)現(xiàn)文件下載進(jìn)度條,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解

    React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解

    這篇文章主要為大家介紹了React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)

    React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)

    這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • React Hook的使用示例

    React Hook的使用示例

    這篇文章主要介紹了React Hook的使用示例,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

崇仁县| 东丽区| 谢通门县| 扎兰屯市| 普兰县| 屏南县| 色达县| 南丹县| 融水| 凤阳县| 咸阳市| 澳门| 大石桥市| 五峰| 富裕县| 修水县| 深圳市| 南丹县| 海盐县| 婺源县| 黑山县| 乌拉特前旗| 阳东县| 鄢陵县| 新丰县| 晋州市| 大埔县| 新田县| 武夷山市| 青海省| 漳平市| 商河县| 吴忠市| 四子王旗| 黔西县| 宁远县| 宜兰市| 武鸣县| 平顶山市| 沁阳市| 大港区|