React-Hooks-useImperativeHandle

简介: React-Hooks-useImperativeHandle

前言


useImperativeHandle 是 React 中的一个 Hooks,它通常与 forwardRef 一起使用,用于控制在函数组件内部暴露给父组件的 ref 对象的内容和方法。这个 Hook 允许您更精细地控制子组件的 API,使其更易于使用。




useImperativeHandle Hook 概述


  • useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值

暴露给父组件的实例值 这个是什么意思呢大致意思就是说,你想把当前组件的什么内容给父组件,可以实现一个权限的效果:

import React, {useRef, forwardRef} from 'react';
function Home(props, appRef) {
    return (
        <div>
            <p>Home</p>
            <input ref={appRef} type="text" placeholder={'请输入内容'}/>
        </div>
    )
}
const ForwardHome = forwardRef(Home);
function App() {
    const appRef = useRef();
    function btnClick() {
        appRef.current.focus();
        appRef.current.value = 'yangbuyiya';
    }
    return (
        <div>
            <ForwardHome ref={appRef}/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}
export default App;

如上代码呢,就是在 App 组件当中调用了 ForwardHome 然后获取了 ForwardHome 组件当中的 input,然后在让 input 聚焦焦点,然后又设置了 input 的 value 值。


如果这个时候,你只想让他进行聚焦,不想让他设置值,这个时候就需要借助 useImperativeHandle 才可以实现该需求(如下代码是正确情况下):

import React, {useRef, forwardRef, useImperativeHandle} from 'react';
function Home(props, appRef) {
    const inputRef = useRef();
    useImperativeHandle(appRef, () => {
        return {
            myFocus: () => {
                inputRef.current.focus();
            }
        }
    });
    return (
        <div>
            <p>Home</p>
            <input ref={inputRef} type="text" placeholder={'请输入内容'}/>
        </div>
    )
}
const ForwardHome = forwardRef(Home);
function App() {
    const appRef = useRef();
    function btnClick() {
        appRef.current.myFocus();
    }
    return (
        <div>
            <ForwardHome ref={appRef}/>
            <button onClick={() => {
                btnClick()
            }}>获取
            </button>
        </div>
    )
}
export default App;


不正确的情况就是还是使用 ref 引用的方法来进行调用的情况如下:

发现直接报错了,只能通过访问 useImperativeHandle 方法返回的内容来进行设置和调用。

相关文章
|
10月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
212 9
|
存储 前端开发 JavaScript
高效组件的设计与封装之道
本文结合了作者自身碰到的场景来说明如何做好组件设计和封装。
217 19
|
11月前
|
设计模式 Java Android开发
安卓应用开发中的内存泄漏检测与修复
【9月更文挑战第30天】在安卓应用开发过程中,内存泄漏是一个常见而又棘手的问题。它不仅会导致应用运行缓慢,还可能引发应用崩溃,严重影响用户体验。本文将深入探讨如何检测和修复内存泄漏,以提升应用性能和稳定性。我们将通过一个具体的代码示例,展示如何使用Android Studio的Memory Profiler工具来定位内存泄漏,并介绍几种常见的内存泄漏场景及其解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的技巧和方法,帮助你打造更优质的安卓应用。
|
10月前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
10月前
|
前端开发 JavaScript
React 表单处理技巧
【10月更文挑战第24天】本文从初学者角度出发,详细介绍了 React 中表单处理的基本概念、常见问题及解决方案。涵盖受控组件与非受控组件的区别、状态更新、表单验证、多字段管理及高级技巧,通过代码示例帮助读者更好地理解和应用。
248 7
|
12月前
|
前端开发 JavaScript 开发者
React的useId,现在Vue3.5终于也有了!
【9月更文挑战第22天】React 的 `useId` 功能已在 Vue 3.5 中引入,用于生成唯一 ID,提升开发效率,确保组件 ID 的一致性和增强应用的可访问性。开发者能更简便地管理唯一标识符,减少繁琐工作,同时保证在服务器和客户端渲染下的稳定性。这一改进使得 Vue 应用更加高效、易用和可靠。
139 3
|
存储 前端开发 JavaScript
react的useRef用什么作用
react的useRef用什么作用
218 1
|
前端开发 JavaScript API
|
Linux 虚拟化 Windows
linux之df命令 查看分区大小
linux之df命令 查看分区大小
244 1
|
Windows
NPM——通过commitlint来规范commit的提交信息
NPM——通过commitlint来规范commit的提交信息
201 0