React?實(shí)現(xiàn)爺孫組件間相互通信
前言
最近在學(xué)習(xí)React,給大家總結(jié)下跨組件通信中,爺孫組件之間怎么相互通信。簡單明了上代碼直接一把梭,不多解釋。
爺孫組件間通信
案例如下:


代碼:
//跨組件通信
import React, { Component } from 'react'
//創(chuàng)建context 給初始值
const UserMessage = React.createContext({
nickName: 'yyy',
level: 1
})
export default class TextSingal extends Component {
constructor(props) {
super(props)
this.state = {
nickName: 'kkk',
level: 99,
name: 'ppp',
age: 9999
}
}
render() {
const { name, age } = this.state
return (
<div>
<h2>爺爺組件</h2>
<h3>name:{name}</h3>
<h3>age:{age}</h3>
{/* 改變數(shù)據(jù)孫組件也更新 */}
<button onClick={() => this.handelClick()}>updated</button>
{/* 傳入state對(duì)象和foo回調(diào)函數(shù) */}
{/* foo函數(shù)用于孫組件和爺組件通信 */}
<UserMessage.Provider value={{ ...this.state, foo: (name, age) => this.updateDatas(name, age) }}>
<Father />
</UserMessage.Provider>
</div>
)
}
handelClick() {
this.setState({
nickName: '虎威神',
level: 9999
})
}
updateDatas(name, age) {
this.setState({
name,
age
})
}
}
class Father extends Component {
render() {
return (
<div>
<h2>爸爸組件</h2>
<Son />
</div>
)
}
}
class Son extends Component {
render() {
// 解構(gòu)
const { nickName, level, foo } = this.context
return (
<div>
<h2>兒子組件</h2>
<h3>nickname:{nickName}</h3>
<h3>level:{level}</h3>
{/* 下面兩種調(diào)用方式都可以 */}
{/* 改變爺組件的數(shù)據(jù) */}
<button onClick={() => this.handelClick()}>updated</button>
<button onClick={() => foo('牛霸天', 18)}>updated</button>
</div>
)
}
handelClick() {
this.context.foo('牛霸天', 18)
}
}
// 接受爺組件傳遞的值
Son.contextType = UserMessage爺給孫組件通信就不多說了,直接創(chuàng)建context傳入默認(rèn)對(duì)象,然后在爺組件用該創(chuàng)建名創(chuàng)建對(duì)象包裹父組件,通過value傳值過去,然后在孫組件Son.contextType 進(jìn)行接收,在this.context取值即可。


孫給爺傳值則是和子跟父傳值的道理一樣,通過傳入回調(diào)函數(shù)來進(jìn)行修改。
到此這篇關(guān)于React 四線爺孫組件間相互通信的文章就介紹到這了,更多相關(guān)React組件通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React前端解鏈表數(shù)據(jù)結(jié)構(gòu)示例詳解
這篇文章主要為大家介紹了React前端解鏈表數(shù)據(jù)結(jié)構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
react?fiber使用的關(guān)鍵特性及執(zhí)行階段詳解
這篇文章主要為大家介紹了react?fiber使用的關(guān)鍵特性及執(zhí)行階段詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

