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

React組件通信的實現(xiàn)示例

 更新時間:2023年11月13日 08:36:03   作者:寶子向前沖  
在React中,組件通信是一個重要的概念,它允許不同組件之間進(jìn)行數(shù)據(jù)傳遞和交互,本文主要介紹了React組件通信的實現(xiàn)示例,感興趣的可以了解一下

組件通信的意義

目標(biāo)任務(wù): 了解為什么需要組件通信

組件是獨立且封閉的單元,默認(rèn)情況下組件只能使用自己的數(shù)據(jù)(state)

組件化開發(fā)的過程中,完整的功能會拆分多個組件,在這個過程中不可避免的需要互相傳遞一些數(shù)據(jù)

為了能讓各組件之間可以進(jìn)行互相溝通,數(shù)據(jù)傳遞,這個過程就是組件通信

  • 父子關(guān)系 - 最重要的

  • 兄弟關(guān)系 - 自定義事件模式產(chǎn)生技術(shù)方法 eventBus / 通過共同的父組件通信

  • 其它關(guān)系 - mobx / redux / zustand

父傳子實現(xiàn)

目標(biāo)任務(wù): 實現(xiàn)父子通信中的父傳子,把父組件中的數(shù)據(jù)傳給子組件

實現(xiàn)步驟

  • 父組件提供要傳遞的數(shù)據(jù) - state

  • 給子組件標(biāo)簽添加屬性值為 state中的數(shù)據(jù)

  • 子組件中通過 props 接收父組件中傳過來的數(shù)據(jù)

  • 類組件使用this.props獲取props對象

    函數(shù)式組件直接通過參數(shù)獲取props對象

代碼實現(xiàn)

 import React from 'react'
 ?
 // 函數(shù)式子組件
 function FSon(props) {
   console.log(props)
   return (
     <div>
       子組件1
       {props.msg}
     </div>
   )
 }
 ?
 // 類子組件
 class CSon extends React.Component {
   render() {
     return (
       <div>
         子組件2
         {this.props.msg}
       </div>
     )
   }
 }
 // 父組件
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <FSon msg={this.state.message} />
         <CSon msg={this.state.message} />
       </div>
     )
   }
 }
 ?
 export default App

props說明

目標(biāo)任務(wù): 知道props傳遞時的一些注意事項

1. props是只讀對象(readonly)

根據(jù)單項數(shù)據(jù)流的要求,子組件只能讀取props中的數(shù)據(jù),不能進(jìn)行修改

2. props可以傳遞任意數(shù)據(jù)

數(shù)字、字符串、布爾值、數(shù)組、對象、函數(shù)、JSX

class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <FSon 
           msg={this.state.message} 
           age={20} 
           isMan={true} 
           cb={() => { console.log(1) }} 
           child={<span>this is child</span>}
         />
         <CSon msg={this.state.message} />
       </div>
     )
   }
 }

子傳父實現(xiàn)

目標(biāo)任務(wù): 實現(xiàn)父子通信中的子傳父

口訣: 父組件給子組件傳遞回調(diào)函數(shù),子組件調(diào)用

實現(xiàn)步驟

  • 父組件提供一個回調(diào)函數(shù) - 用于接收數(shù)據(jù)

  • 將函數(shù)作為屬性的值,傳給子組件

  • 子組件通過props調(diào)用 回調(diào)函數(shù)

  • 將子組件中的數(shù)據(jù)作為參數(shù)傳遞給回調(diào)函數(shù)

代碼實現(xiàn)

import React from 'react'
 ?
 // 子組件
 function Son(props) {
   function handleClick() {
     // 調(diào)用父組件傳遞過來的回調(diào)函數(shù) 并注入?yún)?shù)
     props.changeMsg('this is newMessage')
   }
   return (
     <div>
       {props.msg}
       <button onClick={handleClick}>change</button>
     </div>
   )
 }
 ?
 ?
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   // 提供回調(diào)函數(shù)
   changeMessage = (newMsg) => {
     console.log('子組件傳過來的數(shù)據(jù):',newMsg)
     this.setState({
       message: newMsg
     })
   }
   render() {
     return (
       <div>
         <div>父組件</div>
         <Son
           msg={this.state.message}
           // 傳遞給子組件
           changeMsg={this.changeMessage}
         />
       </div>
     )
   }
 }
 ?
 export default App

兄弟組件通信

目標(biāo)任務(wù): 實現(xiàn)兄弟組件之間的通信

核心思路: 通過狀態(tài)提升機(jī)制,利用共同的父組件實現(xiàn)兄弟通信

實現(xiàn)步驟

  • 將共享狀態(tài)提升到最近的公共父組件中,由公共父組件管理這個狀態(tài)

    • 提供共享狀態(tài)

    • 提供操作共享狀態(tài)的方法

  • 要接收數(shù)據(jù)狀態(tài)的子組件通過 props 接收數(shù)據(jù)

  • 要傳遞數(shù)據(jù)狀態(tài)的子組件通過props接收方法,調(diào)用方法傳遞數(shù)據(jù)

代碼實現(xiàn)

 import React from 'react'
 ?
 // 子組件A
 function SonA(props) {
   return (
     <div>
       SonA
       {props.msg}
     </div>
   )
 }
 // 子組件B
 function SonB(props) {
   return (
     <div>
       SonB
       <button onClick={() => props.changeMsg('new message')}>changeMsg</button>
     </div>
   )
 }
 ?
 // 父組件
 class App extends React.Component {
   // 父組件提供狀態(tài)數(shù)據(jù)
   state = {
     message: 'this is message'
   }
   // 父組件提供修改數(shù)據(jù)的方法
   changeMsg = (newMsg) => {
     this.setState({
       message: newMsg
     })
   }
 ?
   render() {
     return (
       <>
         {/* 接收數(shù)據(jù)的組件 */}
         <SonA msg={this.state.message} />
         {/* 修改數(shù)據(jù)的組件 */}
         <SonB changeMsg={this.changeMsg} />
       </>
     )
   }
 }
 ?
 export default App

跨組件通信Context

目標(biāo)任務(wù): 了解Context機(jī)制解決的問題和使用步驟

上圖是一個react形成的嵌套組件樹,如果我們想從App組件向任意一個下層組件傳遞數(shù)據(jù),該怎么辦呢?目前我們能采取的方式就是一層一層的props往下傳,顯然很繁瑣

那么,Context 提供了一個無需為每層組件手動添加 props,就能在組件樹間進(jìn)行數(shù)據(jù)傳遞的方法

實現(xiàn)步驟

1- 創(chuàng)建Context對象 導(dǎo)出 Provider 和 Consumer對象

 const { Provider, Consumer } = createContext()

2- 使用Provider包裹上層組件提供數(shù)據(jù)

<Provider value={this.state.message}>
     {/* 根組件 */}
 </Provider>

3- 需要用到數(shù)據(jù)的組件使用Consumer包裹獲取數(shù)據(jù)

 <Consumer >
     {value => /* 基于 context 值進(jìn)行渲染 */}
 </Consumer>

代碼實現(xiàn)

import React, { createContext }  from 'react'
 ?
 // 1. 創(chuàng)建Context對象 
 const { Provider, Consumer } = createContext()
 ?
 ?
 // 3. 消費數(shù)據(jù)
 function ComC() {
   return (
     <Consumer >
       {value => <div>{value}</div>}
     </Consumer>
   )
 }
 ?
 function ComA() {
   return (
     <ComC/>
   )
 }
 ?
 // 2. 提供數(shù)據(jù)
 class App extends React.Component {
   state = {
     message: 'this is message'
   }
   render() {
     return (
       <Provider value={this.state.message}>
         <div className="app">
           <ComA />
         </div>
       </Provider>
     )
   }
 }
 ?
 export default App

到此這篇關(guān)于React組件通信的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)React組件通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 解決antd的Table組件使用rowSelection屬性實現(xiàn)多選時遇到的bug

    解決antd的Table組件使用rowSelection屬性實現(xiàn)多選時遇到的bug

    這篇文章主要介紹了解決antd的Table組件使用rowSelection屬性實現(xiàn)多選時遇到的bug問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • React競態(tài)條件Race Condition實例詳解

    React競態(tài)條件Race Condition實例詳解

    這篇文章主要為大家介紹了React競態(tài)條件Race Condition實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解在create-react-app使用less與antd按需加載

    詳解在create-react-app使用less與antd按需加載

    這篇文章主要介紹了詳解在create-react-app使用less與antd按需加載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • React 18版本配置rem 和 vw的詳細(xì)步驟

    React 18版本配置rem 和 vw的詳細(xì)步驟

    這篇文章主要介紹了React 18版本配置rem 和 vw的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • React嵌套組件的構(gòu)建順序

    React嵌套組件的構(gòu)建順序

    這篇文章主要介紹了React嵌套組件的構(gòu)建順序,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React Hooks使用實戰(zhàn)深度解析

    React Hooks使用實戰(zhàn)深度解析

    useEffect是React提供的Hook,用于處理副作用操作(如數(shù)據(jù)獲取、訂閱、手動 DOM 修改等),這篇文章給大家介紹React Hooks使用實戰(zhàn),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • React?state結(jié)構(gòu)設(shè)計原則示例詳解

    React?state結(jié)構(gòu)設(shè)計原則示例詳解

    這篇文章主要為大家介紹了React?state結(jié)構(gòu)設(shè)計原則示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • React組件化學(xué)習(xí)入門教程講解

    React組件化學(xué)習(xí)入門教程講解

    React是現(xiàn)在前端使用頻率最高的三大框架之一,React率先提出虛擬DOM的思想和實現(xiàn),使其保持有良好的性能。本篇文章將對React組件化的入門學(xué)習(xí)進(jìn)行講解,同時針對模塊化的思想進(jìn)行概述,為接下來組件化開發(fā)的文章進(jìn)行知識儲備
    2022-09-09
  • 記錄React使用connect后,ref.current為null問題及解決

    記錄React使用connect后,ref.current為null問題及解決

    記錄React使用connect后,ref.current為null問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • React RenderProps模式超詳細(xì)講解

    React RenderProps模式超詳細(xì)講解

    render props是指一種在 React 組件之間使用一個值為函數(shù)的 prop 共享代碼的技術(shù)。簡單來說,給一個組件傳入一個prop,這個props是一個函數(shù),函數(shù)的作用是用來告訴這個組件需要渲染什么內(nèi)容,那么這個prop就成為render prop
    2022-11-11

最新評論

西吉县| 昌江| 青冈县| 万盛区| 连平县| 石阡县| 琼海市| 巴彦淖尔市| 鸡东县| 吴忠市| 崇仁县| 藁城市| 昌邑市| 泽普县| 安达市| 普安县| 邢台市| 来凤县| 迁安市| 亳州市| 措美县| 玉龙| 绍兴县| 沙雅县| 凉城县| 乐安县| 梁平县| 科尔| 库伦旗| 汤原县| 肥西县| 兴国县| 商丘市| 永靖县| 蒙自县| 卓尼县| 北川| 商洛市| 札达县| 弥勒县| 贺州市|