暂定人事信息保存按钮

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;

 

昨晚梦到了荒唐的事 窝可能是疯了.......

买了一把Ukulele还有一个键盘 很快就会到了 想清楚了也没用有些事

 

posted @ 2022-05-30 09:59  fiamme  阅读(35)  评论(0编辑  收藏  举报