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 相关文章推荐
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
JQuery下的Live方法和$.browser方法使用代码
Jun 02 Javascript
JavaScript中的操作符==与===介绍
Dec 31 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
Aug 21 Javascript
详解angular用$sce服务来过滤HTML标签
Apr 11 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
教你如何用Node实现API的转发(某音乐)
Sep 20 Javascript
js实现tab栏切换效果
Aug 02 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 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
漂亮但不安全的CTB
2006/10/09 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
vue实现分页加载效果
2019/12/24 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
使用Python写一个小游戏
2018/04/02 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
python实现扫雷游戏的示例
2020/10/20 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
小学语文国培感言
2014/03/04 职场文书
财产公证书格式
2014/04/10 职场文书
师德师风自查材料
2014/10/14 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
使用golang编写一个并发工作队列
2021/05/08 Golang
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技