React 中 ref 的使用

官方文档传送门

在类组件中使用 ref

1. React.createRef

class App extends React.Component {

    constructor(props) {
        super(props);
        this.divRef = React.createRef();
    }

    componentDidMount() {
        console.log(this.divRef.current);
    }

    render() {
        return <div ref={this.divRef}>验证 createRef 的一个div标签</div>
    }
}

2. 回调函数使用 ref

class App extends React.Component {

    constructor(props) {
        super(props);
        this.divRef = React.createRef();
    }

    componentDidMount() {
        console.log(this.divRef);
    }

    render() {
        return <div ref={ref => { this.divRef = ref }}>验证 createRef (回调方式) 的一个div标签</div>
    }
}

注意: 以上方法不能在函数组件中使用,因为函数组件没有实例。

在函数组件中使用 ref

1. React.useRef

const UseRefComponent = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current);
    }, []);
	
    return <div ref={divRef}>验证 useRef 的一个 div 标签</div>
}

2. React.forwardRef

export const App = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current);
    }, []);
	
    return <ForwardRefComponent ref={divRef} />
}

export const ForwardRefComponent = React.forwardRef((props, ref) => {
    return <div ref={ref}>验证 forwardRef 的一个 div 标签</div>
})

3. React.useImperativeHandle

export const App = () => {
    const divRef = React.useRef();
	
    React.useEffect(() => {
        console.log(divRef.current.clog());
    }, []);
	
    return <ForwardRefComponent ref={divRef} />
}

export const ForwardRefComponent = React.forwardRef((props, ref) => {
    const divRef = React.useRef();
	
    React.useImperativeHandle(ref, () => ({
        clog: () => {
            console.log(divRef.current);
        }
    }));

    return <div ref={divRef}>验证 useImperativeHandle 的一个 div 标签</div>
})
posted @   太轻描淡写了  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示