欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React使用context進(jìn)行跨級組件數(shù)據(jù)傳遞

 更新時(shí)間:2024年01月25日 10:14:32   作者:a堅(jiān)強(qiáng)的泡沫  
這篇文章給大家介紹了React使用context進(jìn)行跨級組件數(shù)據(jù)傳遞的方法步驟,文中通過代碼示例給大家介紹的非常詳細(xì),對大家學(xué)習(xí)React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧

應(yīng)用:無需為每層組件手動添加 props,能狗在組件樹間進(jìn)行數(shù)據(jù)傳遞的方法。

1、創(chuàng)建context

ContextProvider.tsx:

import React, { useMemo, useState } from 'react';

export interface ContextState {
  viewRef?: React.MutableRefObject<null>;
  activeIndex: number;
  setActiveIndex: (data: number) => void;
}

// 創(chuàng)建一個(gè)context
export const Context = React.createContext<ContextState>({
  activeIndex: 0,
  setActiveIndex: () => {},
});

const ContextProvider: React.FC<
  { children: React.ReactNode } & {
    viewRef: React.MutableRefObject<null>;
  }
> = ({ children, viewRef }) => {
  // 使用useState監(jiān)聽狀態(tài)變更
  const [activeIndex, setActiveIndex] = useState(0);

  const value = useMemo(() => {
    return {
      viewRef,
      activeIndex,
      setActiveIndex, // 通過context來更新對象和數(shù)據(jù),則可以使用state的方式將其傳遞下去
    };
  }, [showQuizsAnswer, shotViewRef, viewRef]);

  // Context提供一個(gè)Provider組件,并將自組件包裹起來,這里的props名稱必須是value
  return <Context.Provider value={value}>{children}</Context.Provider>;
};

export default ContextProvider;

要更新 context,請將其與 state 結(jié)合。在父組件中聲明一個(gè)狀態(tài)變量,并將當(dāng)前狀態(tài)作為 context value 傳遞給 provider。

上述寫法可以參考 useContext。

2、提供context

App.tsx:

import ContextProvider from './ContextProvider';

function App() {
  // 下面這種寫法是無效的,不能在父組件中使用
  // const {  setActiveIndex, activeIndex } = React.useContext(context);
  
  return (
    // 使用provider包裹,之后所有的子組件都可以獲取得到距離他最近的provider的數(shù)據(jù)
    <ContextProvider viewRef={viewRef}>
      <ChildComponent onChange={handleChange} />
    </ContextProvider>
  );
}

注意:在這里App.tsx里面不能消費(fèi)context,因?yàn)锳pp.tsx屬于父組件。

useContext() 總是在調(diào)用它的組件 上面 尋找最近的 provider。它向上搜索, 不考慮 調(diào)用 useContext() 的組件中的 provider。 所以上面注釋掉的寫法是錯(cuò)誤的。

3、使用context

ChildComponent.txs:

function ChildComponent() {
  // 使用useContext鉤子訪問Context的值
  const { setActiveIndex, activeIndex } = React.useContext(MyContext);

  // 在子組件中調(diào)用setActiveIndex函數(shù)來更改value值
  const handleInputChange = (newValue) => {
    setActiveIndex(newValue);
  };

  return (
    <TextInput value={activeIndex} onChangeText={handleInputChange} />
  );
}

到此這篇關(guān)于React使用context進(jìn)行跨級組件數(shù)據(jù)傳遞的文章就介紹到這了,更多相關(guān)React context組件數(shù)據(jù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React?中hooks之?React.memo?和?useMemo用法示例總結(jié)

    React?中hooks之?React.memo?和?useMemo用法示例總結(jié)

    React.memo是一個(gè)高階組件,用于優(yōu)化函數(shù)組件的性能,通過記憶組件渲染結(jié)果來避免不必要的重新渲染,合理使用React.memo和useMemo可以顯著提升React應(yīng)用的性能,本文介紹React?中hooks之?React.memo?和?useMemo用法總結(jié),感興趣的朋友一起看看吧
    2025-01-01
  • 簡談創(chuàng)建React Component的幾種方式

    簡談創(chuàng)建React Component的幾種方式

    這篇文章主要介紹了創(chuàng)建React Component的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • React組件的用法概述

    React組件的用法概述

    React組件用來實(shí)現(xiàn)局部功能效果的代碼和資源的集合(html/css/js/image等等),這篇文章主要介紹了React組件的用法和理解,需要的朋友可以參考下
    2023-02-02
  • React路由封裝的實(shí)現(xiàn)淺析

    React路由封裝的實(shí)現(xiàn)淺析

    路由是React項(xiàng)目中相當(dāng)重要的概念,對于功能較為復(fù)雜的網(wǎng)頁來說,必然會涉及到不同功能間的頁面跳轉(zhuǎn),本篇文章將對React官方維護(hù)的路由庫React-Router-Dom的使用和常用組件進(jìn)行講解,同時(shí)對路由組件傳遞param參數(shù)的方式進(jìn)行講解,希望對各位讀者有所參考
    2022-08-08
  • 從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    本文主要介紹了從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 關(guān)于React Native 無法鏈接模擬器的問題

    關(guān)于React Native 無法鏈接模擬器的問題

    許多朋友遇到React Native 無法鏈接模擬器的問題,怎么解決呢,本文給大家分享完整簡便解決方法及配置例題,對React Native 鏈接模擬器相關(guān)知識感興趣的朋友一起看看吧
    2021-06-06
  • 解讀useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)"

    解讀useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)"

    這篇文章主要介紹了useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)",具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React實(shí)現(xiàn)點(diǎn)擊切換組件效果

    React實(shí)現(xiàn)點(diǎn)擊切換組件效果

    這篇文章主要為大家詳細(xì)介紹了如何基于React實(shí)現(xiàn)點(diǎn)擊切換組件效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • react-router-dom之異步加載路由方式

    react-router-dom之異步加載路由方式

    這篇文章主要介紹了react-router-dom之異步加載路由方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • React路由規(guī)則定義與聲明式導(dǎo)航及編程式導(dǎo)航分別介紹

    React路由規(guī)則定義與聲明式導(dǎo)航及編程式導(dǎo)航分別介紹

    這篇文章主要介紹了React路由規(guī)則的定義、聲明式導(dǎo)航、編程式導(dǎo)航,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09

最新評論