当前位置: 首页 > news >正文

react hook: useimperativeHandle

通过 useImperativeHandle,子组件可以选择性地暴露给父组件某些属性或方法,而不是将所有属性和方法暴露出去。

父组件 获得自组件的 ref,就能通过该 ref 来调用 focus来聚焦等功能

在 forwardRef 包装的组件中,ref 固定地是第二个参数,而第一个参数是这个组件接受的 props。这是 React 为了确保 forwardRef 正确工作而规定的。所以在这种情况下,ref 必须放在第二个参数的位置。

app.jsimport { useRef } from 'react';
import MyInput from './MyInput.js';export default function Form() {const ref = useRef(null);function handleClick() {ref.current.focus();// 下方代码不起作用,因为 DOM 节点并未被暴露出来:// ref.current.style.opacity = 0.5;}return (<form><MyInput placeholder="Enter your name" ref={ref} /><button type="button" onClick={handleClick}>Edit</button></form>);
}myInput.jsimport { forwardRef, useRef, useImperativeHandle } from 'react';const MyInput = forwardRef(function MyInput(props, ref) {const inputRef = useRef(null);useImperativeHandle(ref, () => {return {focus() {inputRef.current.focus();},scrollIntoView() {inputRef.current.scrollIntoView();},};}, []);return <input {...props} ref={inputRef} />;
});export default MyInput;

不要滥用 ref。 你应当仅在你没法通过 prop 来表达 命令式 行为的时候才使用 ref:例如,滚动到指定节点、聚焦某个节点、触发一次动画,以及选择文本等等。

如果可以通过 prop 实现,那就不应该使用 ref。例如,你不应该从一个 Model 组件暴露出 {open, close} 这样的命令式句柄,最好是像 这样,将 isOpen 作为一个 prop。副作用 可以帮你通过 prop 来暴露一些命令式的行为。

http://www.lryc.cn/news/312738.html

相关文章:

  • 30天自制操作系统(第28天)
  • Nginx启动服务
  • coqui-ai/TTS 案例model文件
  • 如何利用API接口进行高效的商品变体管理?
  • 扼杀网络中的环路:STP、RSTP、MSTP
  • 青少年如何从零开始学习Python编程?有它就够了!
  • 触发HTTP preflight预检及跨域的处理方法
  • 【算法可视化】搜索算法专题
  • 编写dockerfile挂载卷、数据容器卷
  • 理解OAuth 2.0
  • 8. Go实现Gin服务优雅关机与重启
  • SQL 注入攻击 - cookie base64编码注入
  • Outlook邮箱后缀如何修改?怎么添加后缀?
  • [LeetBook]【学习日记】图书整理 II——用两个栈实现队列
  • 5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型
  • 一个系列很多样式的wordpress外贸建站模板
  • Wireshark_labs TCP
  • Linux程序崩溃调试
  • Day37 socket、TCP、UDP
  • 从 Language Model 到 Chat Application:对话接口的设计与实现
  • 无人机|LQR控制算法及其无人机控制中的应用仿真
  • ubuntu环境下docker容器详细安装使用
  • vue2源码分析-vue入口文件global-api分析
  • Javascript原型 ,原型链如何理解使用 ?有什么特点?
  • Flutter混合栈管理方案对比
  • Asp .Net Core 集成 Newtonsoft.Json
  • GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?
  • 795. 前缀和(acwing)
  • 1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数
  • 图论练习5