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 相关文章推荐
Jquery 获取checkbox的checked问题
Nov 16 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 Javascript
将List对象列表转换成JSON格式的类实现方法
Jul 04 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
js判断两个数组相等的5种方法
May 06 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 mkdir()定义和用法
2009/01/14 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python入门学习指南分享
2018/04/11 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
2014年党总支工作总结
2014/12/18 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
青少年法制教育心得体会
2016/01/14 职场文书