react高阶组件是什么意思

在react中,高阶组件是一个函数,是用于重用组件逻辑的高级技术;高阶组件用于接受一个组件作为参数,返回一个新的组件,这个新的组件会使用传给它的组件作为子组件,可以用属性代理和反向继承两种方法来实现高阶组件。

react高阶组件是什么意思

本教程操作环境:Windows10系统、react17.0.1版、Dell G3电脑。

react高阶组件是什么意思

高阶组件是一个函数(而不是组件),它接受一个组件作为参数,返回一个新的组件。这个新的组件会使用你传给它的组件作为子组件 -引用自React.js小书

高阶组件(Higher-Order Components)是 React 中用于重用组件逻辑的高级技术。 HOC 本身不是 React API 的一部分。 它们是从 React 构思本质中浮现出来的一种模式。

在我们项目中使用react-redux框架的时候,有一个connect的概念,这里的connect其实就是一个高阶组件。也包括类似react-router-dom中的withRouter的概念

01.png

构建一个简单的hoc

function hello (){    console.log("hello i  love react ")}function hoc(fn){    return ()=>{          console.log("first");          fn();          console.log("end");    }}hello = hoc(hello);hello();

登录后复制

实现高阶组件的方法

实现高阶组件的方法有如下两种:

属性代理。高阶组件通过呗包裹的React组件来操作props

反向继承。高阶组件继承于被包裹的React组件

接下来我们分别来阐述这两种方法。

属性代理

属性代理是我们react中常见高阶组件的实现方法,我们通过一个例子来说明:

import React,{Component} from 'react';const MyContainer = (WraooedComponent) =>     class extends Component {        render(){            return         }    }

登录后复制

从这里看到最重要部分是render 方法中返回了传入 WrappedComponent的React组件。这样,我们就可以通过高阶组件来传递props。这种方法即为属性代理。

自然,我们想要使用MyContainer这个高阶组件就变得非常容易:

import React,{Component} from 'react';class MyComponent extends Component{    //...}export default MyContainer(MyComponent);

登录后复制

这样组件就可以一层层地作为参数被调用,原始组件就具备了高阶组件对它的修饰。就这么简单,保持单个组件封装性的同时还保留了易用性。当然,我们也可以用decorator来转换。

当使用属性代理构建高阶组件时,调用顺序不同于mixin。上述执行生命周期的过程类似于堆栈调用:

didmount ->HOC didmount ->(HOCs didmount)->(HOCs will unmount)->HOC will unmount -> unmount

登录后复制

反向继承

另一种构建高阶组件的方法称为反向继承,从字面意思上看,它一定与继承性相关。我们同样来看一个简单的实现。

const MyContainer = (WrappedComponent)=>{    class extends WrappedComponent {        render(){            return super.render();        }    }}

登录后复制

如上代码。高阶组件返回的组件继承于 WrappedComponent 。因为被动地继承了 WrappedComponent,所有的调用都会反向,这也是种方法的由来。

这种方法与属性代理不太一样。它通过继承WrappedComponent来实现,方法可以通过super来顺序调用。因为依赖于继承机制。HOC的调用顺序和队列是一样的。

didmount -> HOC didmount ->(HOCs didmount) -> will unmount ->HOC will unmount ->(HOCs will unmount)

登录后复制

在反向继承方法中,高阶组件可以使用 WrappedComponent 引用,这意味着它可以使用 WrappedComponent 的state 、props。生命周期和render方法。但它不能保证完整的子组件树被解析。它有两个比较大的特点,下面我们展开来讲一讲。

渲染劫持

渲染劫持就是指的是高阶组件可以控制 WrappedComponent的渲染过程,并渲染各种各样的结果。我们可以在这个过程中在任何React元素输出的结果中读取、增加、修改、删除props,或读取或修改React元素树,或条件显示。又或者用样式包裹元素树

控制state

高阶组件可以读取、修改或删除WrappedComponent实例中的state,如果需要的话,也可以增加state。

组件命名

当包裹一个高阶组件时,我们失去了原始 WrappedComponent的displayName,而组件名字是方便我们开发与调试的重要属性。

组件参数

有时,我们调用高阶组件需要传入一些参数,这可以用非常简单的方式来实现。

import React from 'react'function HOCFactoryFactory(...params){    return function HOCFactory(WrappedComponent){        return class HOC extends Component{            render(){                return             }        }    }}

登录后复制

当你使用的时候,可以这么写:

HOCFactoryFactory(params)(WrappedComponent)//or@HOCFactoryFactory(params)class WrappedComponent extends React.Component{}

登录后复制

这也是利用了函数式编程的特征。可见,在React抽象的过程中,处处可见它的影子。

推荐学习:《react视频教程》

以上就是react高阶组件是什么意思的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2933616.html

(0)
上一篇 2025年3月11日 20:33:52
下一篇 2025年3月11日 20:34:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • react中hook是什么

    在react中,hook是React16.8新增的特性,用于在不编写class的情况下使用state及其他的react特性;可以用函数组件去使用react中的一些特性,也可以让函数组件也拥有状态,通过自定义hook实现在组件间公用状态操作。…

    2025年3月11日
    200
  • react15与16版本的不同是什么

    不同:1、15版本架构分为协调器和渲染器两部分,而16版本架构分为调度器、协调器和渲染器三个部分;2、15版本的reconciler是采用递归形式工作是同步的,而16版本的reconciler采用的是异步可中断更新代替15版本的同步更新。 …

    2025年3月11日
    200
  • react单页面和多页面的区别是什么

    区别:1、多页面应用不同的URL返回不同的HTML,而单页面应用不同URL返回同一个HTML;2、多页面应用即使两个页面存在公共资源,这些公共资源会被清空重新下载,而单页面应用的这些公共资源不会被重复下载。 本教程操作环境:Windows1…

    2025年3月11日
    200
  • react中key的用法是什么

    在react中,key用于识别组件,可在DOM中的某些元素被增加或删除时识别哪些元素发生了变化,是一种身份标识;可以根据key来决定是销毁还是更新组件,若key相同,组件有变化就只更新组件相应的属性,若key不同,会销毁之前的组件重新渲染。…

    2025年3月11日
    200
  • react怎么关闭eslint

    方法:1、利用“npm run eject”复制所有依赖文件和相应的依赖到项目中;2、在“package.json”中修改“”eslintConfig””项目的代码;3、若缺少依赖,需要重新安装依赖,利用“npm s…

    2025年3月11日
    200
  • react-redux有什么用

    “react-redux”的作用:1、将组件分为了容器组件和UI组件;2、取代redux中的“store.subscribe”监听组件的状态变化,用于渲染组件;3、配合redux使用,使组件轻松的拿到全局状态,方便组件间的通信。 本教程操作…

    2025年3月11日
    200
  • react dnd的用法是什么

    react dnd用于构建复杂的拖放界面,并保持组件之间的耦合,是一组react高阶组件;使用时只需用对应的API将目标组件包裹,即可实现拖动或接受拖动元素的功能;不需要判断拖动状态,只需在传入的spec对象中各个状态属性中做对应处理即可。…

    2025年3月11日 编程技术
    200
  • react withrouter的用法是什么

    react withrouter用于将一个组件包裹进Route里面,并将“react-router”的三个history、location、match对象传入props对象,引入语法为“import{withRouter}from&#823…

    2025年3月11日
    200
  • 什么时候使用react-redux

    使用“react-redux”的场景:1、用户的使用方式复杂时;2、不同身份的用户有不同的使用方式时;3、多个用户之间可以协作时;4、与服务器大量交互,或者使用了WebSocketView时;5、要从多个来源获取数据时。 本教程操作环境:W…

    2025年3月11日
    200
  • react跟vue的diff算法有什么区别

    区别:1、当节点元素类型相同,但className不同时,vue认为是不同类型元素,会删除重建,而react会认为是同类型节点,只修改节点属性;2、列表比对,vue采用从两端到中间的比对方式,而react则采用从左到右依次比对的方式。 本教…

    2025年3月11日
    200

发表回复

登录后才能评论