React 實現爺孫組件間相互通信
前言
最近在學習React,給大傢總結下跨組件通信中,爺孫組件之間怎麼相互通信。簡單明瞭上代碼直接一把梭,不多解釋。
爺孫組件間通信
案例如下:
代碼:
//跨組件通信 import React, { Component } from 'react' //創建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> {/* 改變數據孫組件也更新 */} <button onClick={() => this.handelClick()}>updated</button> {/* 傳入state對象和foo回調函數 */} {/* foo函數用於孫組件和爺組件通信 */} <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() { // 解構 const { nickName, level, foo } = this.context return ( <div> <h2>兒子組件</h2> <h3>nickname:{nickName}</h3> <h3>level:{level}</h3> {/* 下面兩種調用方式都可以 */} {/* 改變爺組件的數據 */} <button onClick={() => this.handelClick()}>updated</button> <button onClick={() => foo('牛霸天', 18)}>updated</button> </div> ) } handelClick() { this.context.foo('牛霸天', 18) } } // 接受爺組件傳遞的值 Son.contextType = UserMessage
爺給孫組件通信就不多說瞭,直接創建context傳入默認對象,然後在爺組件用該創建名創建對象包裹父組件,通過value傳值過去,然後在孫組件Son.contextType 進行接收,在this.context取值即可。
孫給爺傳值則是和子跟父傳值的道理一樣,通過傳入回調函數來進行修改。
到此這篇關於React 四線爺孫組件間相互通信的文章就介紹到這瞭,更多相關React組件通信內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!