React进阶用法和hooks - 5.useRef,useImperativeHandle和forwardRef的结合使用以及useLayoutEffect、useDebugValue的简单使用

本文介绍了React中useRef, useImperativeHandle, forwardRef的组合应用,强调其灵活性和控制力。同时讲解了useLayoutEffect的作用,用于同步执行DOM更新,并展示了useDebugValue如何在React开发者工具中显示自定义Hook的标记,便于调试。" 101755037,5677891,PHP初级面试知识点总结,"['PHP', '技术面试', 'PHP初级', 'PHP后台开发', '数据库优化']
摘要由CSDN通过智能技术生成

5.useRef,useImperativeHandle和forwardRef的结合使用以及useLayoutEffect、useDebugValue的简单使用

注意:hooks只能在函数(无状态组件)中使用

useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内保持不变。(官方介绍)
从上面可以发现,useRef比createRef来说,更加的灵活,也更好的控制
forwardRef:引用父组件的ref实例,成为子组件的一个参数,可以引用父组件的ref绑定到子组件自身的节点上.
useImperativeHandle : 第一个参数,接收一个通过forwardRef引用父组件的ref实例,第二个参数一个回调函数,返回一个对象,对象里面存储需要暴露给父组件的属性或方法
可以查看官网hookApi了解相关知识,官方建议useImperativeHandle和forwardRef同时使用,减少暴露给父组件的属性,避免使用 ref 这样的命令式代码
废话不多说,上使用useImperativeHandle和forwardRef的组合代码
//Test.tsx文件
import React, {
    FC, Fragment, useRef, MutableRefObject, forwardRef, ForwardRefExoticComponent, Ref, useImperativeHandle, ChangeEvent, SyntheticEvent, memo } from "react";
const Test: FC = (): JSX.Element => {
   
    const testRef: MutableRefObject<any> = useRef('test');
    const handleClick = (e:SyntheticEvent<HTMLButtonElement>):void =>{
   
        console.log('自身button的内容:',e.currentTarget.innerText);
        console.log('子组件input的对象:',testRef.current);
        console.log('子组件input的value值:'
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1、React.useState() 是 React 中的一个 Hook 函数,用于在函数组件中添加状态。它返回一个包含当前状态值和更新状态值的数组,可以通过解构赋值获取这两个值。 使用案例: ```javascript import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } ``` 在上面的例子中,我们使用useState() 来创建一个名为 count 的状态变量和一个名为 setCount 的函数。初始值为 0。通过解构赋值,我们可以将 count 的当前值展示在页面上,并在点击按钮时通过 setCount 将 count 的值加1,实现计数器的功能。 2、React.useEffect() 是 React 中的另一个 Hook 函数,用于在函数组件中执行副作用操作,比如订阅数据、修改 DOM 等。它在组件渲染完成后执行,并且可以在组件更新时重新执行。 使用案例: ```javascript import React, { useState, useEffect } from 'react'; function DataFetcher() { const [data, setData] = useState(null); useEffect(() => { // 在组件渲染完成后执行这里的回调函数 fetchData(); }, []); const fetchData = async () => { const response = await fetch('https://api.example.com/data'); const data = await response.json(); setData(data); }; return ( <div> {data ? ( <ul> {data.map((item) => ( <li key={item.id}>{item.name}</li> ))} </ul> ) : ( <p>Loading data...</p> )} </div> ); } ``` 在上面的例子中,我们使用 useEffect() 来执行 fetchData() 函数,该函数通过网络请求获取数据,并将数据更新到组件的状态中。通过传递一个空数组作为第二个参数,我们告诉 React 只在组件渲染完成后执行一次 useEffect(),避免重复执行。 3、React.useRef() 是 React 中的又一个 Hook 函数,用于在函数组件中创建一个可变的 ref 对象。ref 对象可以存储任意可变值,类似于在 class 组件中使用的实例属性。 使用案例: ```javascript import React, { useRef } from 'react'; function InputFocus() { const inputRef = useRef(null); const handleClick = () => { inputRef.current.focus(); }; return ( <div> <input ref={inputRef} type="text" /> <button onClick={handleClick}>Focus Input</button> </div> ); } ``` 在上面的例子中,我们使用 useRef() 创建了一个名为 inputRefref 对象,并将其赋值给 input 元素的 ref 属性。在点击按钮时,通过调用 inputRef.current.focus(),我们可以将焦点设置到输入框上。 总结: - React.useState() 用于在函数组件中添加状态。 - React.useEffect() 用于执行副作用操作,比如订阅数据或修改 DOM。 - React.useRef() 用于创建一个可变的 ref 对象,类似于在 class 组件中使用的实例属性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值