首页 > 其他分享 >react hooks forwardRef, useImperativeHandle使用

react hooks forwardRef, useImperativeHandle使用

时间:2023-01-08 19:58:20浏览次数:54  
标签:React useImperativeHandle hooks react forwardRef props 组件 ref

1、React.forwardRef

React.forwardRef 会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。

React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。

const FancyButton = React.forwardRef((props, ref) => (  <button ref={ref} className="FancyButton">    {props.children}
  </button>
));

// You can now get a ref directly to the DOM button:
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;

在上述的示例中,React 会将 <FancyButton ref={ref}> 元素的 ref 作为第二个参数传递给 React.forwardRef 函数中的渲染函数。该渲染函数会将 ref 传递给 <button ref={ref}> 元素。

因此,当 React 附加了 ref 属性之后,ref.current 将直接指向 <button> DOM 元素实例

 

 

 

2、useImperativeHandle

useImperativeHandle(ref, createHandle, [deps])

useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。在大多数情况下,应当避免使用 ref 这样的命令式代码。useImperativeHandle 应当与 forwardRef 一起使用:

function FancyInput(props, ref) {
  const inputRef = useRef();
  useImperativeHandle(ref, () => ({
    focus: () => {
      inputRef.current.focus();
    }
  }));
  return <input ref={inputRef} ... />;
}
FancyInput = forwardRef(FancyInput);

在本例中,渲染 <FancyInput ref={inputRef} /> 的父组件可以调用 inputRef.current.focus()

 

 

 

标签:React,useImperativeHandle,hooks,react,forwardRef,props,组件,ref
From: https://www.cnblogs.com/liangziaha/p/17035189.html

相关文章

  • Vue和React路由原理
    hash<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title......
  • react 高效高质量搭建后台系统 系列 —— antd和样式
    其他章节请看:react高效高质量搭建后台系统系列antd后续要做登录模块(主页),不仅要解决请求数据的问题,还需要完成antd配置以及样式的准备。antd多种主题风格详情......
  • 解决react typescript项目中引入js库项目打包报错问题
    描述在reacttypescript项目中,在打包的过程中会报错抛出couldnotfindadeclarationfileformodule的错误,报错内容如图所示原因JS库无法在TS中正常的加载,需要修改......
  • 使用React动画库——react-spring
    使用React动画库——react-spring虚拟J关注IP属地:浙江0.722019.11.0816:28:04字数644阅读16,174为了让后台系统视觉体验更好,决定增加过渡动画效果。React官......
  • React组件之间的通信方式总结(下)
    一、写一个时钟用react写一个每秒都可以更新一次的时钟importReactfrom'react'importReactDOMfrom'react-dom'functiontick(){letele=<h1>{ne......
  • React组件之间的通信方式总结(上)
    先来几个术语:官方我的说法对应代码ReactelementReact元素letelement=<span>A爆了</span>Component组件classAppextendsReact.Component{}无Ap......
  • 前端一面react面试题总结
    redux与mobx的区别?两者对⽐:redux将数据保存在单⼀的store中,mobx将数据保存在分散的多个store中redux使⽤plainobject保存数据,需要⼿动处理变化后的操作;mobx适⽤observ......
  • 美团前端一面必会react面试题
    state和props触发更新的生命周期分别有什么区别?state更新流程:这个过程当中涉及的函数:shouldComponentUpdate:当组件的state或props发生改变时,都会首先触发这......
  • 第六章、react高级
    目录十四、Redux的使用一1、javascript纯函数2、为什么需要redux3、redux的核心理念4、redux的三大原则5、redux的基本使用6、node中对ES6模块化的支持7、redux的结构化分8......
  • 前端react项目打包过程记录
    前端react项目打包过程记录1.打包命令npmrunbuild得到打包后的build文件夹,压缩build文件2.使用serve来运行发布版本该步骤可忽略npminstll-gserveserve-sbui......