前言

本博客主要讲述,react中父组件和子组件之间的交流,其中包括父组件和子组件的值的交流和函数方法的交流,即父组件如何如何传值给子组件,父组件将方法传给子组件,父组件如何调用子组件的方法。
本博客主要总结性的讲述了再react中组件的交流方式,举出具体代码的可参考【React组件之间传值】。

统一说明:<ChildrenComponents /> 代表引入的子组件

(一)父组件通过state传值给子组件,子组件通过props获取父组件的传递值

//(一)传值,即在父组件中声明好自己的state,然后传值,如下
//1.初始值
constructor() {super();this.state = {stateValue:true}}
//2.如有改变设定值
this.setState({ stateValue: false })
//3.在父组件中传值
<ChildrenComponents stateValue={this.state.stateValue} stateValue2="react value" />//(二)取值,即在需要的地方取到通过props取父组件传过来的值
//如在componentDidMount中取值
componentDidMount() {const huoquValue = this.props.stateValue;if ( !this.props.stateValue ) {//通过props来接收传递过来的变量console.log('stateValue', this.props.stateValue, this.props.stateValue2)}
}

值得注意一点的是,setState 是一个异步方法,需要render值行的时候才会触发。可以参考我的博客【 React的setState立即执行方案】。


(二)父组件将function函数方法传给子组件,子组件通过props来获取。

//父组件文件中:
class TestHtml extends React.Component {//1.函数方法的声明propsFunction() { console.log('声明在父组件的方法') }render() {return (<div><span><span>//2.传递<ChildrenComponents propsFunction={::this.propsFunction} /></div>)}
}
function mapStateToProps(state, ownProps) {return {}
}function mapDispatchToProps(dispatch) {return {...bindActionCreators(action, dispatch)}
}export default connect(mapStateToProps, mapDispatchToProps)(TestHtml)子组件中获取
//也直接通过 props 来获取传递过来的函数
<Button onClick={this.props.propsFunction} />

说明:写这一段的时候,突发奇想,竟然就把react-redux的页面结构的写出来了。好吧,等下写完这篇,如果有必要就具体写一下这个页面的结构类型吧。


(三)在父组件中调用子组件中的function函数方法。

//注:新的react不能通过是给子组件一个ref,然后父组件通过refs获取到子组件接口的!// 父组件
export default class Parent extends Component {render() {return(<div>{/* 1.通过onRef接收子组件的函数 */}<ChildrenComponents onRef={::this.onRef} /><button onClick={::this.click} >click</button></div>)}onRef(ref) {// 2. 把子组件中的函数赋值到 child 变量中this.child = ref}click() { //调用子组件函数// 4.通过 child 变量调用需要的函数this.child.myChild()}}//子组件
class ChildrenComponents extends Component {componentDidMount(){// 3. 将子组件中的所有函数变量传递到父组件的onRef函数中,此处必须声明this.props.onRef(this)}myChild() { alert('This is child Action') }render() {return ('Child Render Text')}
}

(四)特殊情况

当你发现这些方法都不起作用的时候,或者说,因为某些限制而不能用的时候,你就换一下思路了。
其实我们还可以通过action–reduce的方式在他们的外部且是公共的action-reduce中搞定。
其中涉及到方法我们就直接新建一个方法,在action中声明,在reduce中实现。如果只是某个值,用不到函数的,我们可以直接在reduce里面设定,且赋值,最后通过mapStateToProps获取。
关于mapStateToProps,可以直接参考【React依赖注入说明(mapStateToProps/mapDispatchToProps)】


总结

1.父组件通过state向子组件传值,子组件通过props获取父组件所传的值。
2.子组件通过props获取父组件中定义的函数方法,但是需要在父组件调用子组件的标签中写明。
3.父组件调用子组件中函数需要定义一个function函数来转接,而不能通过ref/refs的方式
4.组件之间的交流也不一定要沉在这些直接性的关联的东西,我们的思维还可以提升一个高度,可以考虑通过action-reduce来搞定。
end~
欢迎指正。
~

~
有不明白的也可以留言,联系方式在个人资料处。

react父子组件间的交流相关推荐

  1. 简单教你React父子组件间平级组件间传值

    国庆充电特辑: 堵车堵死,废话不多说直接上菜. 1.父组件对子组件传值 利用props属性传值 class Component extends React.Component {constructor ...

  2. 关于React父子组件间的通信

    1. 父组件向子组件通信 通过props 父组件内容 import React, { Component } from 'react' import Child from './component/C ...

  3. React(04):React中的组件化及父子组件间的传值取值

    前言 接着前一篇继续学习React组件化 React(03):React中的JSX语法 正文 什么是组件化: 是从 UI 界面视图的角度 来进行分析的:把一些可复用的UI元素,抽离为单独的组件:便于项 ...

  4. [react] react父子组件如何通信?

    [react] react父子组件如何通信? props 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

  5. React中组件间通信的方式

    React中组件间通信的方式 React中组件间通信包括父子组件.兄弟组件.隔代组件.非嵌套组件之间通信. Props props适用于父子组件的通信,props以单向数据流的形式可以很好的完成父子组 ...

  6. 组件间数据交互——父组件向子组件传值( props属性值类型) 子组件向父组件传值-携带参数 || 非父子组件间传值

    父组件向子组件传值 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  7. 初识 Vue(18)---(非父子组件间的传值)

    非父子组件间的传值 常一个应用会以一棵嵌套的组件树的形式来组织:将一个大组件进行拆分 下图这种情况的组件间传值(父子组件间传值) 方法:父组件通过 Props 向子组件传值,子组件通过事件触发向父组件 ...

  8. Vue3父子组件间传参通信

    Vue3 父子组件间通信 前言 一.父传子 defineProps 二.子传父 defineEmits 三.子组件暴露属性给父组件 defineExpose 四.依赖注入Provide / Injec ...

  9. Vue-非父子组件间的传值

    文章目录 非父子组件间的传值 使用总线方式 使用方式 完整代码 使用vuex方式 非父子组件间的传值 参考官方文档:https://cn.vuejs.org/v2/guide/migration.ht ...

最新文章

  1. asppython份额_2019年7月编程语言榜单公布:Python第一 份额保持较大幅度增长
  2. undefined symbol: _Py_ZeroStruct
  3. 【MATLAB】变量 ( 特殊变量和常量 | 关键字 | 调用优先级 | 数值显示格式 )
  4. AD 脚本kixtart运用之六(outlook邮件批量生成签名)
  5. kafka依赖zookeeper原因解析及应用场景
  6. jQuery / zepto ajax 全局默认设置
  7. 视觉SLAM笔记(24) 图像基础操作
  8. c语言设计题库及详解答案,c语言程序设计题库及其答案
  9. EndNote X7如何在论文中嵌入中文定格式要求的参考文献
  10. E - A very hard mathematic problem----(2015 summer training #3)
  11. java 闰年闰月_闰四月,说说中国的“闰月”与“闰年”
  12. ubuntu安装xbox手柄的驱动程序
  13. 为什么这么多学生讨厌数学(以及如何解决它)?
  14. Mac下matplotlib显示中文(不用安装字体)
  15. 4.卡尔曼滤波之卡尔曼滤波的基本方程
  16. 王爽《汇编语言》学习笔记
  17. 51单片机使用 8线/4线/PCF8574(I2C) 驱动 LCD1602
  18. 二三层报头及IP分片详解
  19. 腾讯ISUX: 面向未来的 CSS Variable (CSS变量)
  20. MacOS制作启动U盘教程(10.10-12.5各版本命令)

热门文章

  1. JAVA011【Socket网络编程】
  2. 死亡日志nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;——黄妮超
  3. 蓝屏代码ox00000077(0xc000000e,0x00000000)
  4. 计算机领域相关学术会议,计算机学科领域高质量国际学术会议
  5. 绿色平谷 快乐休闲 放松心情 快乐郊游
  6. 互联网快讯:荣耀首款折叠屏手机Magic V定档;极米多款投影产品获消费者青睐;雷军为小米百万美金技术大奖颁奖
  7. Android通用初始化Activity模板
  8. javascrit开发的基本代码结构的
  9. objc非主流代码技巧
  10. Hgame-week 1(部分)