react怎么拿组件里的方法 - 网站

react怎么拿组件里的方法

分类:React入门教程_React框架基础教程 · 发布时间:2020-09-22 10:05 · 阅读:1005

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 。"

更多相关技术文章,请访问HTML中文网

标签:
react

相关文章

react中怎么使用sass?

方法:1、使用npm工具安装sass-loader和node-sass依赖;2、配置webpack.config.js文件;3、在需要的组件中引入scss,然后添加scss代码即可。

react怎么判断checkbox是否被选中

react判断checkbox是否被选中的方法:可以通过【if ($(&quot;#checkbox-id&quot;).get(0).checked) {}】方法来进行判断。还可以通过原生js方法来进行判断,如【ele.checked】。

react子组件如何向父组件传值?

在react中,首先通过父组件给子组件传递一个函数,然后子组件通过参数传到父组件,通过props来传递函数的引用,并通过回调的方式实现;其实就是子组件调用父组件的方法,把值以形参的方式传出来。

react组件什么时候会重新渲染?

每当组件状态改变时,React就会调用render函数进行重新渲染。更改状态意味着当调用setState函数时,React触发更新;这不仅意味着将调用组件的render函数,而且还意味着重新渲染其所有后续子组件,无论其prop是否已更改。

react组件生命周期有几个阶段?

React组件生命周期有三个阶段:加载、更新和卸载。加载阶段表示一个组件实例被创建并被插入到DOM中;更新阶段表示由状态或属性的改变导致组件的重新渲染;卸载阶段表示组件从DOM中移除。

返回分类 返回首页