React 实现爷孙组件间相互通信

 更新时间:2022年08月08日 14:56:05   作者:vs心动​​​​​​​  
这篇文章主要介绍了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组件通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React使用ref方法与场景介绍

    React使用ref方法与场景介绍

    这篇文章主要介绍了React使用ref方法与场景,React支持给任意组件添加特殊属性。ref属性接受一个回调函数,它在组件被加载或卸载时会立即执行
    2022-10-10
  • react父组件更改props子组件无法刷新原因及解决方法

    react父组件更改props子组件无法刷新原因及解决方法

    使用过vue的朋友都知道,vue父组件更改props的值,子组件是会刷新的,而react就未必,今天通过一个例子给大家介绍react父组件更改props子组件无法刷新原因,需要的朋友可以参考下
    2022-09-09
  • react中关于Context/Provider/Consumer传参的使用

    react中关于Context/Provider/Consumer传参的使用

    这篇文章主要介绍了react中关于Context/Provider/Consumer传参的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • React避免不必要的重新渲染的方法示例

    React避免不必要的重新渲染的方法示例

    构建高性能 React 应用程序的关键之一是避免不必要的重新渲染,React 的渲染引擎是高效的,但防止在不需要的地方重新渲染仍然至关重要,在这篇文章中,我们将介绍常见错误以及如何避免它们,需要的朋友可以参考下
    2024-10-10
  • 使用react-beautiful-dnd实现列表间拖拽踩坑

    使用react-beautiful-dnd实现列表间拖拽踩坑

    相比于react-dnd,react-beautiful-dnd更适用于列表之间拖拽的场景,本文主要介绍了使用react-beautiful-dnd实现列表间拖拽踩坑,感兴趣的可以了解一下
    2021-05-05
  • webpack3+React 的配置全解

    webpack3+React 的配置全解

    本篇文章主要介绍了webpack3+React 的配置全解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Webpack3+React16代码分割的实现

    Webpack3+React16代码分割的实现

    这篇文章主要介绍了Webpack3+React16代码分割的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 初识React及React开发依赖详解

    初识React及React开发依赖详解

    React由Facebook来更新和维护,它是大量优秀程序员的思想结晶,React的流行不仅仅局限于普通开发工程师对它的认可,大量流行的其他框架借鉴React的思想,接下来通过本文介绍React基础及React开发依赖介绍,需要的朋友可以参考下
    2022-10-10
  • React/Redux应用使用Async/Await的方法

    React/Redux应用使用Async/Await的方法

    本篇文章主要介绍了React/Redux应用使用Async/Await的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • forwardRef 中React父组件控制子组件的实现代码

    forwardRef 中React父组件控制子组件的实现代码

    forwardRef 用于拿到父组件传入的 ref 属性,这样在父组件便能通过 ref 控制子组件,这篇文章主要介绍了forwardRef - React父组件控制子组件的实现代码,需要的朋友可以参考下
    2024-01-01

最新评论