網(wǎng)站首頁 編程語言 正文
一、前言
組件通信是React中的一個(gè)重要的知識(shí)點(diǎn),下面列舉一下 react hooks中常用的父子、跨組件通信的方法
二、父子組件通信
1)父組件傳值給子組件
子組件代碼:
//子組件 const Child = ({ param1, param2 }) => { return <>父組件傳遞的參數(shù):{param1},{param2}</> }
param1
、param2
為子組件接收父組件的傳參,父組件代碼如下:
父組件代碼
//父組件 const Parent = () => { return <Child //子組件 params1="1" params2="2" /> }
運(yùn)行效果
2)子組件傳值給父組件
子傳父嚴(yán)格來講還是父?jìng)髯樱附M件傳遞給子組件ref
,子組件將想要暴露給父組件的值放在上面,然后父組件就可以使用其值:
首先需要導(dǎo)入對(duì)應(yīng)的模塊包useImperativeHandle
、useRef
,forwardRef
:
import React, { useRef, useImperativeHandle, useEffect, forwardRef } from 'react';
父組件代碼
//父組件 const Parent = () => {//父組件 const ref = useRef(); //ref useEffect(() => { console.log(ref) }, []) return ( <Child //子組件 ref={ref} //將ref傳遞給子組件 />) }
子組件代碼
//子組件 const Child = forwardRef(({ },ref) => { useImperativeHandle(ref, () => ({ data: '我是子組件' })); return <>我是子組件</> })
運(yùn)行后控制臺(tái)輸出
{
?? ?"current": {
?? ??? ?"data": "我是子組件"
?? ?}
}
3)跨組件傳值(父?jìng)鲗O子組件)
跨組件傳值我們頁可以使用最開始介紹的父?jìng)髯拥姆椒ǎ粚訉拥那短讉鬟f,例如:
const Parent = () => { return <Child1 //子組件 param1="1" param2="2" /> } //子組件 const Child1 = ({ param1, param2 }) => { return <Child2 param1={param1} param2={param2} /> } //子子組件 const Child2 = ({ param1, param2 }) => { return <>父組件傳遞的參數(shù):{param1},{param2}</> }
但如果有更多層嵌套時(shí),一層層的傳遞會(huì)顯得很冗余和麻煩,所以我們可以使用context
來解決這個(gè)問題。
在項(xiàng)目目錄創(chuàng)建一個(gè)context.js
文件用于創(chuàng)建我們的context
,代碼如下:
import { createContext } from 'react' const myContext = createContext(null) export default myContext
然后在我們組件文件中引入我們定義的myContext
,并引入react對(duì)應(yīng)包:
import React, { useContext } from 'react'; import myContext from './context'
父組件代碼
const Parent = () => { //使用Provider傳遞值 return <myContext.Provider value={{ param1: "1", param2: "2" }}> <Child1 /> </myContext.Provider> }
子組件和子子組件代碼
//子組件無需改動(dòng) const Child1 = () => { return <Child2 /> } //子子組件 const Child2 = () => { //通過useContext獲取父組件的值 const { param1, param2 } = useContext(myContext) return <>父組件傳遞的參數(shù):{param1},{param2}</> }
運(yùn)行效果
原文鏈接:https://blog.csdn.net/momoda118/article/details/125988039
相關(guān)推薦
- 2022-08-04 Python對(duì)FTP交互封裝的實(shí)現(xiàn)_python
- 2022-06-08 基于Apache?Hudi在Google云構(gòu)建數(shù)據(jù)湖平臺(tái)的思路詳解_Linux
- 2022-04-12 git bash 管理員權(quán)限_liunx安裝zsh、oh-my-zsh(無root權(quán)限安裝)
- 2022-06-26 python中class類與方法的用法實(shí)例詳解_python
- 2022-06-01 詳解使用內(nèi)網(wǎng)穿透工具Ngrok代理本地服務(wù)_其它綜合
- 2022-03-31 React-Router6版本的更新引起的路由用法變化_React
- 2022-10-17 python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy())_pyth
- 2022-08-16 C++超詳細(xì)梳理基礎(chǔ)知識(shí)_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支