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【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
37 0
|
3月前
|
前端开发 调度 开发者
React的事件处理机制
【5月更文挑战第29天】React的事件处理机制
35 2
|
3月前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理按钮的点击行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理按钮的点击行为?
39 1
|
3月前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
82 1
|
3月前
|
前端开发
掌握React中的useContext:访问父组件数据的神奇技巧
掌握React中的useContext:访问父组件数据的神奇技巧
|
3月前
|
存储 前端开发 JavaScript
【亮剑】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
314 0
|
3月前
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
|
3月前
|
前端开发 JavaScript 开发者
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(二)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
58 0
|
3月前
|
JavaScript 前端开发 算法
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件(一)
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
51 0

热门文章

最新文章