React:高阶组件|ref转发

这篇具有很好参考价值的文章主要介绍了React:高阶组件|ref转发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高阶组件

        参考文档:高阶组件 – React (reactjs.org)

        高阶组件(Higher-Order Components,简称 HOC)是React中用于复用组件逻辑的一种高级技巧。具体而言:高阶组件是参数为组件,返回值为新组件的函数

        组件是将 props 转换为 UI,而高阶组件是将组件转换为另一个组件。

        HOC 在 React 的第三方库中很常见,例如 Redux 的 connect 和 Relay 的 createFragmentContainer。

        此处不再搬运高阶组件具体如何使用的部分,详情参考React官网文档即可。

ref转发:forwardRef

        forwardRef函数的作用,

forwardRef 允许组件使用 ref 将 DOM 节点暴露给父组件。

        简单讲:就是让子级函数式组件除了props参数之外,额外拥有第二个参数ref;之后就可以在父组件中拿到这个ref,从而去调用子组件中暴露出来的方法。

import { forwardRef } from 'react';

const MyInput = forwardRef(function MyInput(props, ref) {
  // ...
});

        然后在父组件中,可以定义ref属性,来拿到子组件的引用,伪代码示例如下,

//这里是父组件
export default ()=>{
    const myInputRef = useRef();
    
    //调用方式:
    //myInputRef.current.doXXX();
    
    return (<MyInput ref={myInputRef}/>);
}

 暴露句柄:useImperativeHandle

        那么,通过forwardRef转发给子组件的ref所调用的具体方法/句柄如何定义呢?

useImperativeHandle 是 React 中的一个 Hook,它能让你自定义由 ref 暴露出来的句柄。

useImperativeHandle(ref, createHandle, dependencies?)

        例如:以下代码就为MyInput组件提供了doSomething句柄,供父组件通过ref来调用,文章来源地址https://www.toymoban.com/news/detail-833815.html

import { forwardRef, useImperativeHandle } from 'react';

const MyInput = forwardRef(function MyInput(props, ref) {
  useImperativeHandle(ref, () => {
    return {
         //向外暴露的句柄
        doSomething:() =>{
                console.log('here is children method!');
                return 'do-something'
      },
    };
  }, []);

  return <input {...props} />;
});

完整示例代码

子组件:MyInput

import { forwardRef, useImperativeHandle } from 'react';

const MyInput = forwardRef(function MyInput(props, ref) {
  useImperativeHandle(ref, () => {
    return {
         //向外暴露的句柄
        doSomething:() =>{
                console.log('here is children method!');
                return 'do-something'
      },
    };
  }, []);

  return <input {...props} />;
});

父组件

//这里是父组件
export default ()=>{
    const myInputRef = useRef();
    
    //调用方式:
    //myInputRef.current.doXXX();
    const clickHandler = ()=>{
       myInputRef.current.doSomething(/*params*/); 
    }
    
    return (<>
        <MyInput ref={myInputRef}/>
        <button onClick={clickHandler}>click here</button>
    </>);
}

到了这里,关于React:高阶组件|ref转发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【React】组件性能优化、高阶组件

    React更新机制 ◼ React在props或state发生改变时,会调用React的render方法,会创建一颗不同的树。 ◼ React需要基于这两颗不同的树之间的差别来判断如何有效的更新UI: ​  如果一棵树参考另外一棵树进行完全比较更新,那么即使是最先进的算法,该算法的复杂程度为 O(n³),其

    2024年01月23日
    浏览(43)
  • react-高阶组件

    高阶组件( Higher-Order Component,HOC )是一个以 组件作为参数 ,返回一个 新组件 的 函数 。 高阶组件最大的特点就是 复用组件逻辑 高阶组件本身并不是 React 的 API,而是React组件的一种设计模式,一种组件重用的 高级技巧 高阶组件是一个 函数 ,接收要包装的组件,返回增

    2024年02月07日
    浏览(39)
  • React的高阶组件详解

    高阶组件基本介绍 什么是高阶组件呢? 在认识高阶组价之前, 我们先来回顾一下什么是高阶函数? 相信很多同学都知道(听说过?),也用过高阶函数 高阶组件和高阶函数它们非常相似的 高阶函数的定义, 至少满足以下条件之一: 接受一个或多个函数作为参数; 返回一个新的函数

    2024年02月01日
    浏览(50)
  • React 高阶组件(HOC)

    高阶组件不是 React API 的一部分,而是一种用来复用组件逻辑而衍生出来的一种技术。 高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。基本上,这是从 React 的组成性质派生的一种模式,我们称它们为“纯”组件, 因为它们可以接受任何动态

    2024年02月12日
    浏览(40)
  • React - 你使用过高阶组件吗

    难度级别:初级及以上                                 提问概率:55%  高阶组件并不能单纯的说它是一个函数,或是一个组件,在React中,函数也可以做为一种组件。而高阶组件就是将一个组件做为入参,被传入一个函数或者组件中,经过一定的加工处理,最

    2024年04月16日
    浏览(46)
  • React 组件的3大属性: refs

    Refs(引用)是 React 中用于访问组件中的 DOM 元素或其他 React 组件实例的一种机制。它们提供了一种途径,使你可以在React中直接操作和访问DOM元素,或者在React组件之间进行通信。 用途: 焦点的管理、文本的选择、媒体的播放; 强制触发动画; 继承三方 DOM 库; 字符串 R

    2024年02月06日
    浏览(44)
  • react通过ref获取函数子组件实例方法

    在react16之后带来了hooks之后,确实方便了很多组件开发,也加快了函数式编程的速度,但是当你通过useRef获取子组件的时候,又恰好子组件是一个函数组件,那么将会报一个错误:报这个错误的主要原因是函数组件没有实例对象,所以你没办法通过ref获取子组件实例  Warnin

    2024年02月11日
    浏览(39)
  • React组件间数据传递(弹框和高阶组件(HOC)特性实现)

    在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据传递。我们将通过一个具体的业务场景来深入

    2024年02月11日
    浏览(42)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(59)
  • 前端react入门day03-react获取dom与组件通信

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 受控表单绑定  React中获取DOM 组件通信 父传子  父传子-基础实现 父传子-props说明 父传子 - 特殊的prop children 子传父  使用状态提升实现兄弟组件通信 使用Context机制跨

    2024年02月01日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包