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 相关文章推荐
让IE8支持DOM 2(不用框架!)
Dec 31 Javascript
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
vuejs父子组件通信的问题
Jan 11 Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
原生javascript实现分页效果
Apr 21 Javascript
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 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
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
将python图片转为二进制文本的实例
2019/01/24 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python如何设置静态变量
2020/09/07 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技