react 兄弟组件如何调用对方的方法示例


Posted in Javascript onOctober 23, 2018

最近有一个场景是Child2组件点击让Child1组件里面的state的值发生改变,Child1是一个公用组件,把里面的state值改为props传递,修改内容太多,容易出错,就想找其他的方法来解决兄弟组件调用方法问题,下面看代码:

Child1 是第一个子组件

class Child1 extends React.Component {
 constructor(props) {
  super(props);
  this.state = {
   text:'Child1'
  };
 }
 onChange=()=>{
  this.setState({
   text:'Child1 onChange'
  })
 }
 componentDidMount(){
  this.props.onRef&&this.props.onRef(this)
 }

 render() {
  return (
   <div>{this.state.text}</div>
  );
 }
}

是第二个子组件,和Child1是兄弟组件;

class Child2 extends React.Component {
 constructor(props) {
  super(props);
  this.state = {
  };
 }

 render() {
  return (
   <div onClick={this.props.onClick}>Child2</div>
  );
 }
}

home 父组件

class Home extends React.Component {

 constructor(props) {
  super(props);
  this.state = {
  };
 }
 onRef=(ref)=>{
  this.child1=ref;
 }

 render() {
  return (
   <div className="home">
    <Child1 onRef={this.onRef}/>
    <Child2 onClick={
     ()=>{
      this.child1.onChange&&this.child1.onChange()
     }
    } />
    </div>
  );
 }
}

分析

  • 第一步:在Child1组件的componentDidMount生命周期里面加上this.props.onRef(this),把Child1都传递给父组件,
  • 第二步父组件里面 <Child1 onRef={this.onRef}/> this.onRef方法为onRef=(ref)=>{this.child1=ref;};
  • 第三步 Child2组件触发一个事件的时候,就可以直接这样调用this.child1.onChange(),Child1组件里面就会直接调用onChange函数,修改text为Child1 onChange;

到这里就可以实现调用兄弟组件,其实还是用父组件做了中间传递。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
提高代码性能技巧谈—以创建千行表格为例
Jul 01 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
js模拟C#中List的简单实例
Mar 06 Javascript
javascript动态控制服务器控件实例
Sep 05 Javascript
jquery删除指定子元素代码实例
Jan 13 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
JavaScript Date 知识浅析
Jan 29 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
Elasticsearch实现复合查询高亮结果功能
Sep 10 Javascript
详解React 的几种条件渲染以及选择
Oct 23 #Javascript
详解create-react-app 2.0版本如何启用装饰器语法
Oct 23 #Javascript
彻底弄懂 JavaScript 执行机制
Oct 23 #Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 #Javascript
浅谈JavaScript 代码整洁之道
Oct 23 #Javascript
使用jquery Ajax实现上传附件功能
Oct 23 #jQuery
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 #Javascript
You might like
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
JavaScript Prototype对象
2009/01/07 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
Python ljust rjust center输出
2008/09/06 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Django rest framework实现分页的示例
2018/05/24 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
python中树与树的表示知识点总结
2019/09/14 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
vscode调试django项目的方法
2020/08/06 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
驾驶员安全责任书范本
2014/07/24 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
中国世界遗产导游词
2015/02/13 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android