国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React 組件通信-全面解析

這篇具有很好參考價值的文章主要介紹了React 組件通信-全面解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

父子組件通信

// 導入
import { useState } from "react";

import "./App.scss";
import { defaultTodos } from "./components/module/contentData";

// 子組件
const Module = ({ id, done, text, onToggle, onDelData }) => {
  return (
    <div>
      <span className={done ? "" : "text"} onClick={() => onToggle(id)}>
        -- {text} --
      </span>
      {/* 點擊后子組件調(diào)用父組件函數(shù),將 id 回傳給父組件 */}
      <button onClick={() => onDelData(id)}>刪除</button>
    </div>
  );
};

// 父組件
const App = () => {
  // 狀態(tài)
  const [defaultTodo, setDefaultTodo] = useState(defaultTodos);

  // 修改文字狀態(tài)
  const onToggle = (id) => {
    setDefaultTodo(
      defaultTodo.map((item) => {
        if (item.id === id) return { ...item, done: !item.done };
        return item;
      })
    );
    console.log(defaultTodo);
  };

  // 刪除
  const onDelData = (xId) => {
    const dataId = defaultTodo.filter((item) => item.id !== parseInt(xId));
    console.log(xId, "點擊了刪除", dataId);
    setDefaultTodo(dataId);
  };

  return (
    <div>
      <p>xxx </p>
      {defaultTodo.map((item) => {
        // key 可以直接用
        // return <Module key={item.id} done={item.done} text={item.text}></Module>;

        // {...item} 解構(gòu)寫法,簡化開發(fā)
        // onToggle 給子組件調(diào)用的函數(shù)
        return (
          <Module
            key={item.id}
            {...item}
            onToggle={onToggle}
            onDelData={onDelData}
          ></Module>
        );
      })}
    </div>
  );
};

export default App;

這段代碼包括一個父組件App和一個子組件Module,實現(xiàn)了父子組件之間的通信。

在父組件App中,使用useState來定義了一個狀態(tài)defaultTodo,并初始化為defaultTodos。defaultTodos是從./components/module/contentData文件中導入的一個默認的待辦事項列表。

App組件中定義了兩個回調(diào)函數(shù)onToggleonDelData,分別用于切換待辦事項的狀態(tài)和刪除待辦事項。

子組件Module接收父組件傳遞的參數(shù)id、donetext、onToggleonDelData。在子組件中,使用這些參數(shù)來展示待辦事項的內(nèi)容和狀態(tài),并通過點擊事件調(diào)用父組件傳遞的回調(diào)函數(shù)來修改狀態(tài)或刪除待辦事項。

App組件中,通過defaultTodo.map遍歷defaultTodo數(shù)組,并將每個待辦事項的數(shù)據(jù)作為子組件Module的屬性進行渲染。

父組件和子組件之間通過回調(diào)函數(shù)的方式進行通信,子組件通過調(diào)用父組件傳遞的回調(diào)函數(shù)來傳遞數(shù)據(jù)或狀態(tài)的更新。同時,父組件通過useState來管理狀態(tài)的變化,并通過調(diào)用setDefaultTodo函數(shù)來更新狀態(tài)。

在CSS樣式方面,通過import "./App.scss"導入了App.scss文件,并在子組件的span元素中通過條件渲染添加了不同的樣式效果。

總的來說,這段代碼演示了React中父子組件之間通過props和回調(diào)函數(shù)進行通信,實現(xiàn)待辦事項列表的展示、狀態(tài)切換和刪除功能。

兄弟組件之間的傳值

import { useState } from "react";
import "./App.scss";
import From from "./components/ContentData";
import List from "./components/TitleData";

// 利用轉(zhuǎn)態(tài)提升來讓兄弟組件之間可以傳值
function App() {
  const [data, setData] = useState([
    { id: 1, name: "李白", age: 19 },
    { id: 2, name: "杜甫", age: 29 },
    { id: 3, name: "白居易", age: 30 },
  ]);

  const addListData = (newData) => {
    console.log("執(zhí)行了");
    setData([...data, { id: Date.now(), name: newData, age: 119 }]);
  };

  return (
    <div>
      <From data={data}></From>
      <hr />
      <List addListData={addListData}></List>
    </div>
  );
}

export default App;

List 子組件代碼:

import { List } from "antd";
const ListData = ({ data }) => {
  return (
    <div>
      <List
        size="large"
        header={<div></div>}
        footer={<div></div>}
        bordered
        dataSource={data}
        renderItem={(item) => <List.Item>{item.name}</List.Item>}
      />
    </div>
  );
};

export default ListData;

From 子組件代碼:


import { ProForm, ProFormText } from "@ant-design/pro-components";
import "./index.css";

const From = ({ addListData }) => {
  return (
    <div className="box-form">
      <ProForm
        onFinish={async (values) => {
          console.log(values);
          addListData(values.name);
        }}
      >
        <ProFormText name="name" label="姓名" />
      </ProForm>
    </div>
  );
};

export default From;

這段代碼包括一個父組件App和兩個子組件FromList,實現(xiàn)了兄弟組件之間的值傳遞。

在父組件App中,使用useState定義了一個狀態(tài)data,并初始化為一個包含三個對象的數(shù)組。父組件還定義了一個名為addListData的函數(shù),用于向data數(shù)組中添加新的數(shù)據(jù)。

父組件通過將data狀態(tài)和addListData函數(shù)作為props傳遞給子組件FromList。子組件From接收addListData函數(shù),當ProForm表單中的值發(fā)生變化且提交表單時,調(diào)用addListData函數(shù)將新的值添加到父組件的data狀態(tài)中。

子組件List接收data作為props,并使用Ant Design的List組件展示data中的數(shù)據(jù)。

父組件和子組件之間的值傳遞通過props來完成,父組件將狀態(tài)和函數(shù)傳遞給子組件作為props,子組件通過調(diào)用父組件傳遞的函數(shù)來影響父組件的狀態(tài)。

整個應用的目的是讓用戶通過From組件中的表單輸入一條數(shù)據(jù),然后通過List組件展示已經(jīng)輸入的數(shù)據(jù)。父組件App作為中介,在兄弟組件之間傳遞數(shù)據(jù)和函數(shù)。

子組件可以根據(jù)自己的功能和需要使用父組件傳遞的數(shù)據(jù)或函數(shù)來實現(xiàn)相應的功能,實現(xiàn)了兄弟組件之間的值傳遞和交互。

跨組件傳值

import { createContext, useState } from "react";
import ContentData from "./components/ContentData";
import TitleData from "./components/TitleData";

export const ThemeContext = createContext();

const App = () => {
  const [color, setcolor] = useState("#bfc");
  // 無視組件層級關系,跨組件通信
  const editColor = (e) => {
    console.log("觸發(fā)");
    setcolor(e);
  };
  return (
    <div>
      {/* 共享數(shù)據(jù) */}
      <ThemeContext.Provider value={color}>
        <p>123</p>
        <ContentData></ContentData>
        <hr />
        <TitleData editColor={editColor}></TitleData>
      </ThemeContext.Provider>
    </div>
  );
};

export default App;

TitleData 子組件:

const TitleData = ({ editColor }) => {
  const triggeredChange = (e) => {
    console.log(e.nativeEvent.srcElement.value);
    editColor(e.nativeEvent.srcElement.value);
  };
  return (
    <div className="box-form">
      子組件:<p>TitleData</p>
      <input type="color" onChange={(e) => triggeredChange(e)} />
    </div>
  );
};

export default TitleData;

ContentData 子組件:

import { useContext } from "react";
import GrandsonModule from "./components/grandsonModule";
import { ThemeContext } from "../../App";

const ContentData = ({ data }) => {
  const theme = useContext(ThemeContext);

  return (
    <div>
      子組件:<p style={{ color: theme }}>ContentData {theme}</p>
      <GrandsonModule></GrandsonModule>
    </div>
  );
};

export default ContentData;

GrandsonModule 是子孫組件:

GrandsonModule 是 ContentData 子組件的子組件

import { useContext } from "react";
import { ThemeContext } from "../../../App";
const GrandsonModule = () => {
  const theme = useContext(ThemeContext);

  return (
    <div>
      子孫組件:<p>GrandsonModule {theme}</p>
    </div>
  );
};

export default GrandsonModule;

這段代碼它演示了如何使用上下文(Context)在跨組件之間共享數(shù)據(jù)。

App組件中,首先使用createContext函數(shù)創(chuàng)建了一個上下文對象ThemeContext。然后,使用useState來定義一個狀態(tài)color,初始值為"#bfc"。通過setcolor函數(shù)來更新color的值。

editColor函數(shù)中,通過調(diào)用setcolor函數(shù)來更新color的值。該函數(shù)在子組件TitleData中被調(diào)用,用于更新父組件的狀態(tài)。

return語句中,將需要共享的數(shù)據(jù)color放在<ThemeContext.Provider>中的value屬性中。這樣,ThemeContext.Provider包裹的所有組件都可以訪問這個共享的數(shù)據(jù)。在這個例子中,子組件ContentDataTitleData可以訪問color的值。

子組件ContentData使用useContext鉤子來訂閱ThemeContext上下文,并使用theme變量來獲取共享的數(shù)據(jù)color的值。在return語句中,展示了包含theme值的一段文字。

子組件GrandsonModule也使用了useContext鉤子來獲取color的值,并展示了包含theme值的一段文字。

子組件TitleData接收父組件傳遞的editColor函數(shù),并在輸入框的onChange事件中調(diào)用editColor函數(shù)來更新父組件的狀態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-615101.html

到了這里,關于React 組件通信-全面解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • react 組件之間的通信(父子組件)

    React中 組件內(nèi)調(diào)用其他組件不需要進行 類似于vue 聲明組件(components) React 組件內(nèi)調(diào)用其他組件 直接將組件導入 放置在對應的JSX 代碼中 父子組件通信(傳統(tǒng)): 1、父組件-子組件 ?通過屬性傳遞 2、子組件-父組件 ?父組件通過將自身的函數(shù)對象傳遞給子組件, 子組件執(zhí)行父組件

    2024年02月08日
    瀏覽(93)
  • React -- 組件通信

    React -- 組件通信

    A-B 父子通信 B-C 兄弟通信 A-E 跨層通信 **實現(xiàn)步驟 ** 父組件傳遞數(shù)據(jù) - 在子組件標簽上綁定屬性 子組件接收數(shù)據(jù) - 子組件通過props參數(shù)接收數(shù)據(jù) props可以傳遞任意的合法數(shù)據(jù) ,比如數(shù)字、字符串、布爾值、數(shù)組、對象、函數(shù)、JSX props是只讀對象 子組件只能讀取props中的數(shù)據(jù),

    2024年02月19日
    瀏覽(25)
  • React 組件通信方式

    人生的游戲不在于拿了一副好牌,而在于怎樣去打好壞牌,世上沒有常勝將軍,勇于超越自我者才能得到最后的獎杯。 直接通過屬性進行傳遞,數(shù)據(jù)的傳遞可以提高組件的復用性。 通過回調(diào)函數(shù)(callback)來實現(xiàn)。 ref 標記: 父組件拿到子組件的引用,從而調(diào)用子組件的方法

    2024年02月05日
    瀏覽(18)
  • React組件之間通信

    1-1、安裝 1-2、使用 A組件 B組件 1-3、總結(jié)

    2024年02月16日
    瀏覽(22)
  • react父子組件通信

    父傳子:最常見 把父組件中的數(shù)據(jù)傳給子組件 子傳父:子組件調(diào)用父組件傳遞過來的參數(shù),并且把想要傳遞的數(shù)據(jù)當成函數(shù)的實參傳入即可 【子組件通過調(diào)用父組件傳遞到子組件的方法向父組件傳遞數(shù)據(jù)】 對于子傳父中子組件還是先調(diào)用了父組件傳遞過來的參數(shù),之后再向

    2024年02月07日
    瀏覽(28)
  • 【React】組件生命周期、組件通信、setState

    【React】組件生命周期、組件通信、setState

    ? 組件化思想的應用: ? ? 有了組件化的思想,我們在之后的開發(fā)中就要充分的利用它。 ? ? 盡可能的將頁面拆分成一個個小的、可復用的組件。 ? ? 這樣讓我們的代碼更加方便組織和管理,并且擴展性也更強。 ? React的組件相對于Vue更加的靈活和多樣,按照不同的

    2024年01月20日
    瀏覽(20)
  • React中組件之間如何通信?

    React中組件之間如何通信?

    我們將組件間通信可以拆分為兩個詞: 組件 通信 回顧Vue系列的文章,組件是 vue 中最強大的功能之一,同樣組件化是 React 的核心思想 相比 vue , React 的組件更加靈活和多樣,按照不同的方式可以分成很多類型的組件 而通信指的是發(fā)送者通過某種媒體以某種格式來傳遞信息

    2024年02月04日
    瀏覽(16)
  • 【react從入門到精通】React父子組件通信方式詳解(有示例)

    【react從入門到精通】React父子組件通信方式詳解(有示例)

    【分享幾個國內(nèi)免費可用的ChatGPT鏡像】 【10幾個類ChatGPT國內(nèi)AI大模型】 【用《文心一言》1分鐘寫一篇博客簡直yyds】 【用訊飛星火大模型1分鐘寫一個精美的PPT】 在上一篇文章《JSX詳解》中我們了解了什么是jsx以及jsx的語法規(guī)則。 本文中我們將詳細了解React父子組件通信方式

    2024年02月05日
    瀏覽(124)
  • React中組件通信有哪些方式

    React中組件間的通信有一下幾種情況: ? ? ? ? 父組件向子組件通信,可以通過props方式傳遞數(shù)據(jù);也可以通過ref防暑傳遞數(shù)據(jù); ? ? ? ? 子組件向父組件通信,通過回調(diào)函數(shù)方式傳遞數(shù)據(jù); ????????父組件向后代所有組件傳遞數(shù)據(jù),如果組件層級過多,通過props的方式傳

    2024年02月14日
    瀏覽(15)
  • 前端JavaScript企業(yè)框架的全面解析

    在現(xiàn)代Web開發(fā)中,前端JavaScript框架扮演著至關重要的角色。它們提供了豐富的功能和工具,幫助開發(fā)人員構(gòu)建功能強大且易于維護的企業(yè)級應用程序。本篇博客將全面解析前端JavaScript企業(yè)框架,介紹其優(yōu)勢、使用場景和常見的框架選擇。 前端JavaScript企業(yè)框架是一套用于構(gòu)建

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包