[react基础] 组件传值 父传子props 父子互传ref 跨级context

本文详细介绍了React中父传子、子传父以及跨组件通信的多种方式,包括自定义属性、props、ref以及context。通过实例代码展示了如何通过setState、调用子组件方法以及事件回调实现组件间的数据流动。同时,提到了使用context进行跨级通信的基本步骤,包括创建context对象、使用Provider和Consumer进行数据传递。
摘要由CSDN通过智能技术生成

1. 父传子

自定义属性+props

通过自定义属性的方式向子组件传值,子组件通过this.props.值名称接收使用
父:

import React, { Component } from 'react'

export default class Father extends Component {
    constructor() {
        super();
        this.state = {
            msg:"父组件的msg"
        }
    }
    render() {
        return (
            <div className="Father">
                <h2>Father</h2>
                <Child msg={this.state.msg}></Child>
            </div>
        )
    }
}

子组件接收
在这里插入图片描述

父传子 ref

父传子 ref 方法一:直接调子组件的setState

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

父传子 ref 方法二:调用子组件中的方法

在这里插入图片描述
在这里插入图片描述

2. 子传父

事件传值

原理:还是父传子的原理,只不过父组件传递给子组件的不是数据,而是一个方法。
子组件依然通过 this.props 调用。通过调用父组件传过来的方法,并传递参数的方式,把需要传递的值以父组件传来的方法的参数的形式传递给父组件。从而达到子传父的目的。

父组件接收:

import React, { Component } from 'react'
import Child from './Child.jsx'

export default class Father extends Component {
    constructor() {
        super();
        this.state = {
            msg: ""
        }
    }
    render() {
        return (
            <div>
                <h2>Father</h2>
                {/* 父组件给子组件传递一个自身的函数,子组件通过调用函数的方式传值给父组件 */}
                <Child getMsgHandler={this.getMsgHandler.bind(this)}></Child>
            </div>
        )
    }
    
    {/* 在传递的方法中,接收数据 */}
    getMsgHandler(val){
        this.setState({
            msg:val
        })
    }
}

子组件传递:

import React, { Component, Fragment } from 'react'

export default class Child extends Component {
    constructor() {
        super();
        this.state = {
            msg: "子组件的msg"
        }
    }
    render() {
        return (
            <div className="Child">
                <h2>子组件</h2>
                {/* 点击按钮触发父组件传过来的函数 */}
                <button onClick={this.clickHandler.bind(this)}>给父级发送msg</button>
            </div>
        )
    }
    clickHandler() {
        {/* 把需要传递给父组件的值当做参数传进去 */}
        this.props.getMsgHandler(this.state.msg)
    }
}

注意:用bind解决函数this指向为undifined的问题,
或者,用箭头函数

在这里插入图片描述

在这里插入图片描述

子传父 ref

在这里插入图片描述

在这里插入图片描述

3. 跨组件传值

context实现跨级父子组件间的通信

在这里插入图片描述
创建一个context对象
在这里插入图片描述
src\context\appContext.js

// context数据仓库对象

// 1.得到创建context对象的方法
import { createContext } from 'react'

// 2.得到context对象
const ctx = createContext()

// 3.context对象,它提供两个组件,必须解构出来
// Provider 发布/生产
// Consumer 消费
let { Provider, Consumer } = ctx

// 4.导出
export {
  // 默认导出
  ctx as default,
  // 按需导出
  Provider,
  Consumer
}

1. 只获取

App.js
在这里插入图片描述

Child.jsx

在这里插入图片描述
在这里插入图片描述

2. 获取+修改

在这里插入图片描述
Child.jsx
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



参考:
react 中的组件传值

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值