一、父组件传递子组件

在父组件中引入子组件,将父组件的state值放到子组件标签中传递,在子组件中用this.props.传值名称,接收

父组件代码:

import React, { Component } from 'react'
import Goods from '../Good/Goods'export default class App extends Component {constructor(){super()this.state = {mess: '123' //初始化mess属性}}render() {return (<div><h1>{this.state.mess}</h1>{/* 子组件 */}<Goods txt={this.state.mess}></Goods></div>)}
}

子组件代码:

import React, { Component } from 'react'
import PropTypes from 'prop-types'export default class Goods extends Component {constructor(props){super()}render() {return (<div>{/* 接收父组件传递的值 */}<h1>{this.props.txt}</h1></div>)}
}

还可以设置默认值 首先引入 prop-types 代码如下:

import PropTypes from 'prop-types'
Goods.defaultProps={'title':'Titele'
}

Goods是组件名 title是默认值名称 Title是默认值

也可以校验传值的类型 代码如下:

import PropTypes from 'prop-types'
Goods.propTypes = {'title':PropTypes.string.isRequired
}

PropTypes.string是检查是否为字符串

其他的是:

检查值是否为数组
PropTypes.array
检查值是否为布尔类型
PropTypes.bool
检查值是否为函数
PropTypes.func
检查值是否为数字
PropTypes.number
检查值是否为对象
PropTypes.object
检查值是否为Symbol类型
PropTypes.symbol

二、子组件传递父组件

通过this.props.名称(值)传给父组件,父组件在子组件标签中定义方法接收修改渲染的this.state值;代码如下:

子组件代码:

import React, { Component } from 'react'
import PropTypes from 'prop-types'class Goods extends Component {constructor(props){super()}// 点击事件触发此方法zcf=()=>{this.props.fn1('传过来了')}render() {return (<div><h1>{this.props.txt}</h1>{/* 按钮 通过点击事件传值 */}<input type='button' value='传' onClick={this.zcf}></input></div>)}
}

父组件代码:

import Goods from '../Good/Goods'
export default class App extends Component {constructor(){super()this.state = {mess: '123' //初始化mess属性}}// 接收子组件传递的值 修改state状态值shou = (msg)=>{this.setState({mess: msg});}render() {return (<div><h1>{this.state.mess}</h1>{/* fn1为子组件传过来的值 txt为传给子组件的值 */}<Goods fn1={this.shou} txt={this.state.mess}></Goods></div>)}
}

三、兄弟组件传值

兄弟组件传值有两种方法:

第一种方法是通过父组件作为中转传递双方的数据

组件A—传递—> 父组件 —传递—>组件B

这种形式就是把以上两步重新做了一遍 是比较繁琐的 不建议使用这种方法

第二种可以理解成借用一个仓库进行传值

首先创建一个文件作为仓库代码如下:

import {EventEmitter} from 'events'export default new EventEmitter()

然后两个组件都引入这个文件

组件A通过emit向组件B传递数据

组件B通过on接收传递过来的值

代码如下:

组件A代码:

import React, { Component } from 'react'
import eventbus from '../../lib/eventbus'//引入仓库
export default class Com extends Component {constructor(){super()this.state={}}push = () => {return ()=>eventbus.emit('chuan','组件A值')}render() {return (<div>{/* 通过按钮点击事件触发传值方法 */}<input type='button' value='兄弟传值' onClick={this.push()} /></div>)}
}

组件B 代码:

import React, { Component } from 'react'
import eventbus from '../../lib/eventbus'//引入仓库
export default class List extends Component {constructor(){super()this.state={// 初始值title:'11111'}}// 挂载自动执行的生命周期componentDidMount(){// 接收组件A传递的值eventbus.on('chuan',(msg)=>{// 修改成组件A传递过来的值this.setState({title:msg})})}render() {return (<div><h3>{this.state.title}</h3></div>)}
}

至此,即可实现兄弟组件之间的传值了!

现在将两个组件引入带父组件中查看效果即可。

React组件通信传值 父传子 子传父 兄弟组件传值相关推荐

  1. Vue3 学习笔记 —— 父子组件传值、插槽、提供/注入、兄弟组件传值、mitt

    目录 1. 父子组件传值 1.1 父组件给子组件传值 -- v-bind 1.2 子组件接收父组件的传值 -- defineProps 1.3 设置子组件接受参数的默认值 -- withDefault ...

  2. vue.js之非关系组件通信(八竿子打不着的关系组件通信)

    非关系组件通信 非关系组件通信,依赖vue实例方法中的$on(侦听).$off(移除侦听事件).$emit(发出出).$once(只侦听一次). 首先.需要实例化一个vue对象. eventBus.j ...

  3. Vue组件通信:父传子、子传父、跨组件通信

    方法一:组件通信_父传子_props(属性绑定) 在进行组件通信之前,我们首先要明确父和子是谁,父传子=>在父中引入子(被引入的是子) 1. 父传子,要先在子组件内定义props变量,准备接收, ...

  4. Vue组件传值(props属性,父到子,子到父,兄弟传值)

    文章目录 @[TOC](文章目录) 前言 一.props是什么? 使用规则 二.父传子 props 实现步骤 代码实现 效果展示 二.子传父 $emit 实现步骤 代码实现 效果展示 三.兄弟传值 E ...

  5. (React入门)组件通信

    1.父组件向子组件通信 props 父组件直接通过props向子组件传递需要的信息 import React, { Component } from 'react' //子组件 class Child ...

  6. laydate组件 无法传值_Vue组件通信的几种方式

    组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 组件之间的关系 如上图所示,A 和 B.B 和 C. ...

  7. vue组件通信(传值)

    vue组件通信有以下几种方式可以实现(个人总结) 一.父组件到子组件传值方式: 一般通过在父组件中给子组件绑定属性的方式进行传值,子组件通过props来接收. 实例: //父组件 <templa ...

  8. React兄弟组件通信

    1.在父组件定义好回调函数接收组件A传过来的值 // 引入组件 import SonA from "./components/SonA" import SonB from &quo ...

  9. vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)

    前言: vue组件间通信对于经常来写vue的伙伴来说应该是很轻松的,对于一些刚入门的伙伴来说可能就有些迷茫,感觉方式有很多种,但是总结起来又不知道应该怎么说,在下面的文章中,我结合自己的开发过程中经常 ...

  10. Reac组件化以及组件通信

    一.模块与组件以及模块化与组件化慨念 模块:向外提供特定功能的JS文件,便于复用JS,简化JS,提升JS效率数据.对数据的操作(函数).将想暴露的私有的函数向外暴露(暴露的数据类型是对象) 2. 模块 ...

最新文章

  1. EM: 生而为菌,自强不息-嗜酸杆菌在重金属污染土壤中的生态适应性机制
  2. Redis内部数据结构详解之简单动态字符串(sds)
  3. kafka技术内幕(二)
  4. java6 已安装更高版本_Java 10及更高版本的思考
  5. ADF声明性组件示例
  6. 禁用当前的账户win7_系统小技巧:服务客人 开启Windows 10来宾账户
  7. XML解析的四种方式
  8. 通讯录通过id找邮箱和手机
  9. 菜鸟的MySQL学习笔记(二)
  10. BIM学习笔记(一)
  11. 软件工程课程实验报告:实验五
  12. 编程随想 关系图_邹军:想成为编程工程师,玩透数控宏程序编程,这里有一个大招分享给你...
  13. xbox360自建服务器,Xbox360自制系统GOD版的游戏怎么安装
  14. 远程控制计算机显示为什么不能满屏,win7系统连接远程桌面却不能全屏显示的解决方法...
  15. 基于OSGi的企业级开发框架实践——序篇
  16. 数据标注基础知识:文本数据标注的类型及应用场景
  17. Android 源码 图形系统之请求布局
  18. React脚手架创建步骤
  19. 永磁同步电机矢量控制电流环参数整定方法----Matlab controlSystemDesigner的使用
  20. 记第二次面试经历——坐标同花顺

热门文章

  1. 诺基亚x6老是自动关机怎么办
  2. 支付宝使用的30多个开源软件
  3. 如何有效管理工时 - 1
  4. pyecharts 可视化大屏制作
  5. 计算书 轴流式止回阀_轴流式止回阀的制作方法
  6. Clip Converter - 视频在线下载方法
  7. 知识图谱综述论文阅读
  8. CF-Codeforces Round #716 (Div. 2)-1514A. Perfectly Imperfect Array【思维】
  9. Android Studio检查依赖库是否有新版本
  10. 十字路口交通信号灯控制系统