IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react组件通讯的三种方式props:父组件和子组件互相通讯、兄弟组件通讯 -> 正文阅读

[JavaScript知识库]react组件通讯的三种方式props:父组件和子组件互相通讯、兄弟组件通讯

目录

一?父组件 → 子组件

二 子组件 → 父组件

三 兄弟组件通讯


一?父组件 → 子组件

父组件传递数据给子组件

步骤

1 父组件提供要传递的数据,写在state里
2 给子组件标签添加属性,值为state中的数据
3 子组件中通过props接收父组件传递的数据

import React from "react";
import ReactDOM from "react-dom";

//父组件
class Parent extends React.Component {

    //1 父组件提供要传递的数据,写在state里
    state = {
        lastName: "洛"
    }

    render() {
        return (
            <h1>
                父组件:
                {/*2 给子组件标签添加属性,值为state中的数据*/}
                <Child name={this.state.lastName}></Child>
            </h1>
        )
    }
}

//子组件
class Child extends React.Component {
    render() {
        return (<p>
            子组件:
            {/*3 子组件中通过props接收父组件传递的数据*/}
            <span>{this.props.name}</span>
        </p>)
    }
}

// const Child = (props) => {
//     return (<p>
//         子组件:
//         {/*3 子组件中通过props接收父组件传递的数据*/}
//         <span>{props.name}</span>
//     </p>)
// }


//1 传递数据
ReactDOM.render(<Parent/>, document.getElementById("root"));

效果

?二 子组件 → 父组件

思路:利用回调函数,父组件提供回调,子组件调用,将要传递的数据作为回调函数的参数

import React from "react";
import ReactDOM from "react-dom";

//父组件
class Parent extends React.Component {

    state = {
        parentMsg: ''
    }

    //回调函数.用来接收数据
    //4 执行回调函数,在页面alert
    getChildMsg = (data) => {
        alert("接收到子组件传递过来的数据:" + data)
        this.setState({
                parentMsg: data
            }
        )
    }

    render() {
        return (
            <h1>
                父组件:{this.state.parentMsg}
                {/*子组件的属性是回调函数*/}
                {/*3 回调函数getMsg(msg) → getChildMsg(data)*/}
                <Child getMsg={this.getChildMsg}></Child>
            </h1>
        )
    }
}

//子组件
class Child extends React.Component {

    //组件要传递给父组件的数据
    state = {
        msg: "我的帅爸爸"
    }
    handleClick = () => {
        //2 子组件调用父组件中传递过来的回调函数getMsg(msg),回调函数的参数是 子组件要传递给父组件的数据
        this.props.getMsg(this.state.msg)
    }

    render() {
        return (<p>
            子组件:
            <div>
                {/*1 点击按钮,走handleClick函数*/}
                <button onClick={this.handleClick}>点我</button>
            </div>
        </p>)
    }
}

ReactDOM.render(<Parent/>, document.getElementById("root"));

效果

?

?总结:

点击按钮 → 执行handleClick函数 → 执行getMsg(msg)? 该参数msg就是子组件要传递给父组件的数据 →?getChildMsg(data) → alert

三 兄弟组件通讯

将共享状态提示到最近的公共父组件中,由公共父组件来管理这个状态
思想:状态提升
公共父组件职责:
1 提供共享状态
2 提供操作共享状态的方法
?

代码

import React from "react";
import ReactDOM from "react-dom";

//父组件
class Parent extends React.Component {

    //提供共享状态
    state = {
        score: 0
    }

    //提供操作共享状态的方法
    addScore = () => {
        this.setState({
            score:this.state.score+1
            }
        )
    }

    render() {
        return (
            <h1>
                <Child1 score={this.state.score}/>
                <Child2 addScore={this.addScore}/>
            </h1>
        )
    }
}

//子组件1
class Child1 extends React.Component {
    render() {
        return (<h1>分数:{this.props.score}</h1>)
    }
}

//子组件2
class Child2 extends React.Component {

    render() {
        return (<button onClick={this.props.addScore}>点我加分</button>)
    }
}

ReactDOM.render(<Parent/>, document.getElementById("root"));

效果

点击按钮, 增加分数

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:27:19  更:2022-07-21 21:29:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 12:38:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码