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

react當(dāng)我們有兩個(gè)完全不相關(guān)的組件想要通信時(shí),就可以利用這種模式,其中一個(gè)組件負(fù)責(zé)訂閱某個(gè)消息,而另一個(gè)元素則負(fù)責(zé)發(fā)送這個(gè)消息。使用Context配合

這篇具有很好參考價(jià)值的文章主要介紹了react當(dāng)我們有兩個(gè)完全不相關(guān)的組件想要通信時(shí),就可以利用這種模式,其中一個(gè)組件負(fù)責(zé)訂閱某個(gè)消息,而另一個(gè)元素則負(fù)責(zé)發(fā)送這個(gè)消息。使用Context配合。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在nextjs項(xiàng)目中,發(fā)現(xiàn)兩個(gè)組件沒(méi)啥關(guān)系,例如一個(gè)是一直存在的頭部組件,另一個(gè)是頁(yè)面中的組件,當(dāng)我點(diǎn)擊頭部組件中的特定按鈕時(shí),把數(shù)據(jù)傳遞到頁(yè)面組件中,頁(yè)面組件接受到canshu數(shù)據(jù)后在做其他操作,那么他們兩個(gè)如何通訊,通過(guò)context配合觀察者模式實(shí)現(xiàn)。

  1. 首先在其共同的祖先組件中使用context
    下面的代碼文件是根路由組件Layout.js
    其中children就是根據(jù)路由渲染的對(duì)應(yīng)的頁(yè)面
....
import {ConContext} from "../utils/test1";
import EventBus from "../utils/test";
const Layout = () => {
<ConContext.Provider value={EventBus()}>
      <Header />
        {children}
      <Footer></Footer>
      </ConContext.Provider> 

}
export default Layout

test1.js
創(chuàng)建context

import { createContext } from 'react';

export const ConContext = createContext(null);

test.js
使用 useEffect 包裝下,否則會(huì)在服務(wù)端渲染,而服務(wù)端又沒(méi)有瀏覽器對(duì)象,所以會(huì)報(bào)錯(cuò),導(dǎo)致打包失敗,下面代碼中,注釋的代碼就會(huì)報(bào)找不到document,所以使用useEffect包裝下創(chuàng)建了一個(gè)自定義hook勾子 useEvent,這個(gè)鉤子創(chuàng)建一個(gè)變量用于接收EventBus這個(gè)類,為什么要在useEffect 創(chuàng)建EventBus呢,因?yàn)橹挥性趗seEffect中才能拿到瀏覽器對(duì)象,然后在返回變量。然后導(dǎo)出這個(gè)useEvent

"use client"
import {useEffect, useState} from 'react'
// 使用 useEffect 包裝下,否則會(huì)在服務(wù)端渲染,而服務(wù)端又沒(méi)有瀏覽器對(duì)象,所以會(huì)報(bào)錯(cuò),導(dǎo)致打包失敗
const useEvent = () => {
  const [val, setVal] = useState('')
  useEffect(() => {

    class EventBus {
      constructor() {
          this.bus = document.createElement('fakeelement');
      }

      addEventListener(event, callback) {
          this.bus.addEventListener(event, callback);
      }

      removeEventListener(event, callback) {
          this.bus.removeEventListener(event, callback);
      }

      dispatchEvent(event, detail = {}){
          this.bus.dispatchEvent(new CustomEvent(event, { detail }));
      }
    }
    setVal(new EventBus)
  },[])
  return val
}

export default useEvent


// "use client"
// class EventBus {
//   constructor() {
//       this.bus = document.createElement('fakeelement');
//   }

//   addEventListener(event, callback) {
//       this.bus.addEventListener(event, callback);
//   }

//   removeEventListener(event, callback) {
//       this.bus.removeEventListener(event, callback);
//   }

//   dispatchEvent(event, detail = {}){
//       this.bus.dispatchEvent(new CustomEvent(event, { detail }));
//   }
// }

// export default new EventBus
  1. 在header中觸發(fā)事件,
    header.js
    使用useContext接收數(shù)據(jù)
import React, {useState, useContext} from 'react';
const Header = () => {
const EventBus = useContext(ConContext)
// 點(diǎn)擊按鈕時(shí)觸發(fā)
  const clickTab = (url) => {
    setOpenMenu(false)
    // 點(diǎn)擊頭部菜單切換輪播圖開(kāi)始
    // EventBus.dispatchEvent('myEvent', {log: 2})
    // 點(diǎn)擊頭部菜單切換輪播圖結(jié)束
    push(url)
  }
}
export default Header
  1. 在對(duì)應(yīng)的頁(yè)面組件中接收myEvent這個(gè)自定義事件

import React, { useEffect,useRef, useContext } from "react";
import { ConContext } from '../../utils/test1';
const Products = (props) => {
const EventBus = useContext(ConContext)
console.log(EventBus,'EventBus');
const slider = useRef();
const handleEvent = (e) => {
     slider.current.goTo(e.detail.log)
 }
useEffect(() => {
     EventBus.addEventListener('myEvent', handleEvent)
   }, [EventBus]);
}

export default Products;

參考:10種React組件之間通信的方法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-606635.html

到了這里,關(guān)于react當(dāng)我們有兩個(gè)完全不相關(guān)的組件想要通信時(shí),就可以利用這種模式,其中一個(gè)組件負(fù)責(zé)訂閱某個(gè)消息,而另一個(gè)元素則負(fù)責(zé)發(fā)送這個(gè)消息。使用Context配合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React組件之間通信

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

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

    React -- 組件通信

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

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

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

    2024年02月05日
    瀏覽(18)
  • React 組件通信-全面解析

    這段代碼包括一個(gè)父組件 App 和一個(gè)子組件 Module ,實(shí)現(xiàn)了父子組件之間的通信。 在父組件 App 中,使用 useState 來(lái)定義了一個(gè)狀態(tài) defaultTodo ,并初始化為 defaultTodos 。 defaultTodos 是從 ./components/module/contentData 文件中導(dǎo)入的一個(gè)默認(rèn)的待辦事項(xiàng)列表。 App 組件中定義了兩個(gè)回調(diào)函

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

    父?jìng)髯樱鹤畛R?jiàn) 把父組件中的數(shù)據(jù)傳給子組件 子傳父:子組件調(diào)用父組件傳遞過(guò)來(lái)的參數(shù),并且把想要傳遞的數(shù)據(jù)當(dāng)成函數(shù)的實(shí)參傳入即可 【子組件通過(guò)調(diào)用父組件傳遞到子組件的方法向父組件傳遞數(shù)據(jù)】 對(duì)于子傳父中子組件還是先調(diào)用了父組件傳遞過(guò)來(lái)的參數(shù),之后再向

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

    React中組件之間如何通信?

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

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

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

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

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

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

    2024年02月05日
    瀏覽(124)
  • 前端react入門day03-react獲取dom與組件通信

    前端react入門day03-react獲取dom與組件通信

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動(dòng)力,如果看完對(duì)你有幫助,請(qǐng)留下您的足跡) 目錄 受控表單綁定? React中獲取DOM 組件通信 父?jìng)髯? 父?jìng)髯?基礎(chǔ)實(shí)現(xiàn) 父?jìng)髯?props說(shuō)明 父?jìng)髯?- 特殊的prop children 子傳父? 使用狀態(tài)提升實(shí)現(xiàn)兄弟組件通信 使用Context機(jī)制跨

    2024年02月01日
    瀏覽(23)
  • Vue3組件通信相關(guān)內(nèi)容整理

    適用于:? 父向子傳遞參數(shù)、方法,?子觸發(fā)父?jìng)鬟f的方法 props方式組件通信和vue2中的props傳參類似,只是使用方式和接收方式有一些區(qū)別。 注意點(diǎn): 通過(guò)props方式傳遞的參數(shù)為 只讀屬性,不可修改 父組件 子組件? 組件A :綁定事件-接收數(shù)據(jù) ?組件B:觸發(fā)事件-傳遞數(shù)據(jù) 這

    2024年01月25日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包