美文网首页
useimperativeHandle

useimperativeHandle

作者: skoll | 来源:发表于2020-06-22 20:38 被阅读0次

    简介

    1 .在使用ref的时候,自定义暴露给父组件的实例,而不是让父组件随便调用子组件的方法
    2 .父组件可以使用操作子组件中的多个ref

    function Child(props,ref){
        let focusRef=useRef()
        let inputRef=useRef()
    
        useImperativeHandle(ref,()=>{
    
            // 这个函数返回一个对象,该对象会返回一个对象,这个对象就是父组件current的值,通过这种方法,父组件可以操作子组件的多个ref
    
            return {
                focusRef,
                inputRef,
                name:"test",
                focus(){
                    focusRef.current.focus()
                },
                changeText(text){
                    inputRef.current.value=text
                }
            }
        })
    
        return(
            <>
            <input type="text" ref={focusRef}/>
            <input type="text" ref={inputRef}/>
            </>
        )
    }
    
    Child=forwardRef(Child)
    function Example(){
        const parentRef=useRef()
    
        function getFocus(){
            parentRef.current.focus()
            // 这个里面可以调用刚才暴露出来的方法
    
            parentRef.current.changeText('天天去上学')
        }
    
        return (
            <>
                <Child ref={parentRef}/>
                {/* 这个ref就是代指整个组件 */}
                <button onClick={getFocus}>获得焦点</button>
            </>
        )
    }
    

    3 .

    相关文章

      网友评论

          本文标题:useimperativeHandle

          本文链接:https://www.haomeiwen.com/subject/dfyffktx.html