react 调用子(孙)组件方法
在不是用redux的情况下,我们要使用子(孙)组件上的方法,或者属性
调用子组件
import React, {Component} from 'react';

export default class Parent extends Component {
    render() {
        return(
            <div>
                <Child onRef={this.onRef} />
                <button onClick={this.click} >click</button>
            </div>
        )
    }
    //定义一个拿子组件返回值this的函数
    onRef = (ref) => {
        this.child = ref
    }
    //调用处理函数
    click = (e) => {
        this.child.myName()
    }

}

class Child extends Component {
    componentDidMount(){
        //通过pros接收父组件传来的方法
        this.props.onRef(this)
    }

myName = () => alert('子组件fn')

render() {
        return ('ch')
    }
}

步骤分析
在父组件this上先挂载一个child = ref 接收一个参数 ref 子组件传递过来的this
<Child onRef={this.onRef} /> 在子组件上用props传递这个函数
子组件接收这个函数返回自己的this,如:在生命周期中返回这个this
 componentDidMount(){
        //通过pros接收父组件传来的方法
        this.props.onRef(this)
    }

调用孙组件
我们知道了子组件,那孙组件也就自然而然了,其实就是在子组件上在加一层拿子组件返回值this的函数:<Child onRef={this.onRef} />
import React, {Component} from 'react';

export default class Parent extends Component {
    render() {
        return(
            <div>
                <Child onRef={this.onRef} />
                <button onClick={this.click} >click</button>
            </div>
        )
    }
    //定义一个拿子组件返回值this的函数
    onRef = (ref) => {
        this.child = ref
    }
    //调用处理函数
    click = (e) => {
        this.child.childFn()
    }

}
-----------------------华丽的分割线-------------------------------
class Child extends Component {
    componentDidMount(){
        //通过pros接收父组件传来的方法
        this.props.onRef(this)
    }
    onRef = (ref) => {
        this.child = ref
    }
    childFn = (e) => {
        this.child.myName()
        
    }

render() {
        <Child2 onRef={this.onRef}>我是孙组件<Child2>
    }
}

--------------------华丽的分割线-------------------------------
class Child2 extends Component {
    componentDidMount(){
        //通过pros接收父组件传来的方法
        this.props.onRef(this)
    }

myName = () => alert('孙组件fn')

render() {
        return ('ch')
    }
}

我们可以看到 父组件 => 调用子组件的childFn() => 调用孙组件的myName()
其实最好真正调用的还是 孙组件的函数,只不过是孙组件吧当前的this 传给子组件,子组件再传给父组件

ps:
我们可以看到,在组件中一但跨域比较多的组件,通信起来就比较麻烦,就像以上的那样情况,如果这样的情况多了起来且交叉的数据较多,就会变的特别杂乱,这个时候就推荐使用redux 等状态管理工具来实现,组件中的状态管理

那什么情况下需要用到组件的状态管理呢?

用户的使用方式复杂
不同身份的用户有不同的使用方式(比如普通用户和管理员)
多个用户之间可以协作
与服务器大量交互,或者使用了WebSocket
View要从多个来源获取数据
“如果你不知道是否需要 Redux,那就是不需要它。”

Redux 的创造者 Dan Abramov 又补充了一句。

“只有遇到 React 实在解决不了的问题,你才需要 Redux 。”

react 调用子(孙)组件方法相关推荐

  1. vue父页面调用子页面及方法及传参,鼠标光标定位

    项目场景: vue父页面调用子页面及方法 问题描述 vue中父界面调用子界面及方法时界面可以调用,但是调用方法的时候第一次报错,但是关掉界面再次重新打开就没问题了 原因分析: 在我之前添加鼠标指针定位 ...

  2. Layui父级页面调用子级页面方法

    父级页面调用子级页面方法 百度了一堆,没几个有用的,为避免以后会用到,在这记下笔记 layer.open({title : "xxxx",type : 2,content : Gl ...

  3. 使用parent.layer.open()打开页面如何调用子页面的方法

    我的问题: A 页面 包含iframeB页面,从iframe B页面使用parent.layer.open 打开一个iframe弹层C页面,我知道这时弹层是在A页面打开的,现在我想在layer打开的i ...

  4. layer.open参数;layer.open关闭事件;layer.open关闭刷新;layer.open获取子页的值;layer.open调用子页面的方法

    父页面 function layerOpen(){layer.open({type: 2,shade: [0],title: "验收申请",area: ['1024px', '68 ...

  5. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法

    vue 父组件中调用子组件函数的方法 在父组件中调用子组件的方法: 1.给子组件定义一个ref属性.eg:ref="childItem" 2.在子组件的methods中声明一个函数 ...

  6. vue怎么调用子元素的方法_vue.js 父组件如何触发子组件中的方法

    文章目录 组件 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能 ...

  7. vue 子组件调用($emit)父组件方法后父组件方法如何回调子组件方法

    子级组件中的实现 组件名称:EditTable.vue export default{ name:'ET', ....... methods:{ ShowMore(step){             ...

  8. 关于kendo.ui父页面调用子页面的方法问题

    话不多说,直接上代码 $("#父页iframe名").data("kendoTabStrip").contentElement(0).children[0].c ...

  9. 小程序原生组件调用mpvue父组件方法

    通过triggerEvent实现 1.小程序原生子组件 methods: {markertap () {console.log('子组件内部点击')this.triggerEvent('markert ...

最新文章

  1. Deno 1.0?我还没好好研究 Node,你就这样推倒重做?
  2. HDFS namenode 高可用(HA)搭建指南 QJM方式 ——本质是多个namenode选举master,用paxos实现一致性...
  3. .NET获取根目录方法
  4. 用Jquery实现选项卡功能
  5. 使用shell脚本或命令行添加、删除 crontab 定时任务
  6. C#中判断字符串相等的方法
  7. Android代码模拟物理、屏幕点击事件
  8. 从中台、数仓与元数据不为人知的3个角度,看数据管理的生与死
  9. 实验2-4-4 求阶乘序列前N项和 (C语言)
  10. elasticsearch java对象 驼峰原则_2020年Java基础高频面试题汇总(1.4W字详细解析)...
  11. Dotnet运行之控制台
  12. linux火狐怎么清除缓存文件,火狐浏览器如何设置_火狐浏览器怎样清除缓存
  13. qq三国2015最新服务器,合服服务器查询
  14. Liang-Barsky算法思想及简单cpp实现
  15. JSP中文乱码解决方案了解和TOMCAT中文乱码解决
  16. 决策树留一法python代码_从实例中归纳决策树_人工智能一
  17. 禁用ngnix的空主机头
  18. 燕尾服 CodeForces - 573A
  19. 腾讯视频 电视剧/电影 分类统计大全
  20. 白盒测试与黑盒测试的联系与区别

热门文章

  1. selenium - web 自动化测试
  2. 多图表数据分析PPT图表合集
  3. MySQL子查询(嵌套查询)
  4. Unity实现简单贪吃蛇
  5. pywinauto 自动进行远程桌面登陆 remote desktop connection
  6. java矩形_JAVA实现矩形(长方形)的周长面积计算
  7. [Pytorch图像分类全流程实战]Task06:可解释性分析
  8. 系列服务器大概多重,一台服务器有多重
  9. Java的反编译工具提供官网下载
  10. 北大深院计算机录取难度保饰,她高考685分被北大录取却哭了,看到她的书桌,大家沉默了...