react如何在父组件中调用子组件事件

简介: react如何在父组件中调用子组件事件

父组件是如何使用子组件的事件的,下边数值累加的例子


类组件


将子组件的this传到父组件,给父组件添加一个属性,值为this,之后就可以通过父组件的属性调用子组件的事件了

import React,{Component} from 'react';
// 这是子组件
class A extends Component{
    componentDidMount() {
        this.props.fn(this)
    }
    state = {
        count:1
    }
    render() {
        let { count } = this.state;
        return (
            <div>
               子组件的值: {count}
            </div>
        )
    }
}
// 这是父组件
class B extends Component{
    // 这个事件是为了拿到子组件的this
    fn_getThis = (_this) => {
        this.$child=_this
    }
    // 已经拥有子组件this,可以随意调用子组件事件了
    increment = () => {
        this.$child.setState(state => {
         return {count:state.count+1}
     })   
    }
    render() {
        return (
            <div>
                <A fn={this.fn_getThis} />
                <button onClick={()=>{this.increment()}}>
                    父组件的按钮
                </button>
            </div>
        )
    }
}
export default B;


函数组件


useRef,useImperativeHandle ,forwardRef 3个api的配合使用

useImperativeHandle:可以让你在使用 ref 时自定义暴露给父组件的实例值。在大多数情况下,
  应当避免使用 ref 这样的命令式代码。useImperativeHandle 应当与 forwardRef 一起使用。
  语法:  useImperativeHandle(ref, createHandle, [deps])
forwardRef:一个函数,返回一个拥有第二个参数的组件
import React,{useRef,useImperativeHandle ,forwardRef,useState} from 'react';
// 这是子组件
const A = (props,ref) => {
    let [count, setCount] = useState(0)
    useImperativeHandle(ref, () => {
        return {
            imcrement:() => {
                setCount(value => {
                    return value + 1
                })
            }        
        }
    })
    return (
        <div>
            {count}
        </div>
    )
}
const NewA = forwardRef(A)
// 这是子组件
const B = () => {
    let refA = useRef();
    const fn_sonImcrement = () => {
      refA.current.imcrement()
    }
    return(
        <div>
            <NewA ref={refA} />
            <button onClick={()=>{fn_sonImcrement()}}>按钮</button>
        </div>
    )
}
export default B;
相关文章
|
1月前
|
移动开发 前端开发 JavaScript
React 表单与事件
10月更文挑战第10天
36 1
|
16天前
|
前端开发 JavaScript 开发者
React 事件处理机制详解
【10月更文挑战第23天】本文介绍了 React 的事件处理机制,包括事件绑定、事件对象、常见问题及解决方案。通过基础概念和代码示例,详细讲解了如何处理 `this` 绑定、性能优化、阻止默认行为和事件委托等问题,帮助开发者编写高效、可维护的 React 应用程序。
60 4
|
1月前
|
前端开发
|
1月前
|
前端开发 JavaScript IDE
React 事件处理
10月更文挑战第8天
18 1
|
1月前
|
前端开发 JavaScript
一文详解React事件中this指向,面试必备
一文详解React事件中this指向,面试必备
44 0
|
2月前
|
前端开发 JavaScript
react学习(19)事件处理
react学习(19)事件处理
|
2月前
|
前端开发 JavaScript
React的事件与原生事件的执行顺序?
React的事件与原生事件的执行顺序?
|
3月前
|
前端开发 JavaScript Java
React 中的合成事件
【8月更文挑战第30天】
46 6
|
3月前
|
前端开发 JavaScript
React 中的事件是什么?
【8月更文挑战第30天】
71 5
|
3月前
|
前端开发 JavaScript 开发者
如何在 React 中处理事件?
【8月更文挑战第31天】
45 0