iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >React高阶组件的示例分析
  • 411
分享到

React高阶组件的示例分析

2024-04-02 19:04:59 411人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关React高阶组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。高阶组件的定义HoC 不属于 React 的 api,它是一种实现模

这篇文章将为大家详细讲解有关React高阶组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

高阶组件的定义

HoC 不属于 React 的 api,它是一种实现模式,本质上是一个函数,接受一个或多个 React 组件作为参数,返回一个全新的 React 组件,而不是改造现有的组件,这样的组件被称为高阶组件。开发过程中,有的功能需要在多个组件类复用时,这时可以创建一个 Hoc。

基本用法

包裹方式

const HoC = (WrappendComponent) => {
 const WrappinGComponent = (props) => (
  <div className="container">
   <WrappendComponent {...props} />
  </div>
 );
 return WrappingComponent;
};

上述代码中,接受 WrappendComponent 作为参数,此参数就是将要被 HoC 包装的普通组件,在 render 中包裹一个 div,赋予它 className 属性,最终产生的 WrappingComponent 和 传入的 WrappendComponent 是两个完全不同的组件。

在 WrappingComponent 中,可以读取、添加、编辑、删除传给 WrappendComponent 的 props,也可以用其它元素包裹 WrappendComponent,用来实现封装样式、添加布局或其它操作。

组合方式

const HoC = (WrappedComponent, LoginView) => {
 const WrappingComponent = () => {
  const {user} = this.props; 
  if (user) {
   return <WrappedComponent {...this.props} />
  } else {
   return <LoginView {...this.props} />
  }
 };
 return WrappingComponent;
};

上述代码中有两个组件,WrappedComponent 和 LoginView,如果传入的 props 中存在 user,则正常显示的 WrappedComponent 组件,否则显示 LoginView 组件,让用户去登录。HoC 传递的参数可以为多个,传递多个组件定制新组件的行为,例如用户登录状态下显示主页面,未登录显示登录界面;在渲染列表时,传入 List 和 Loading 组件,为新组件添加加载中的行为。

继承方式

const HoC = (WrappendComponent) => {
 class WrappingComponent extends WrappendComponent {
  render() (
   const {user, ...otherProps} = this.props;
   this.props = otherProps;
   return super.render();
  }
 }
 return WrappingComponent;
};

WrappingComponent 是一个新组件,它继承自 WrappendComponent,共享父级的函数和属性。可以使用 super.render() 或者 super.componentWillUpdate() 调用父级的生命周期函数,但是这样会让两个组件耦合在一起,降低组件的复用性。

React 中对组件的封装是按照最小可用单元的思想来进行封装的,理想情况下,一个组件只做一件事情,符合 OOP 中的单一职责原则。如果需要对组件的功能增强,通过组合的方式或者添加代码的方式对组件进行增强,而不是修改原有的代码。

注意事项

不要在 render 函数中使用高阶组件

render() {
 // 每一次render函数调用都会创建一个新的EnhancedComponent实例
 // EnhancedComponent1 !== EnhancedComponent2
 const EnhancedComponent = enhance(MyComponent);
 // 每一次都会使子对象树完全被卸载或移除
 return <EnhancedComponent />;
}

React 中的 diff 算法会比较新旧子对象树,确定是否更新现有的子对象树或丢掉现有的子树并重新挂载。

必须将静态方法做拷贝

// 定义静态方法
WrappedComponent.staticMethod = function() {}
// 使用高阶组件
const EnhancedComponent = enhance(WrappedComponent);

// 增强型组件没有静态方法
typeof EnhancedComponent.staticMethod === 'undefined' // true

Refs属性不能传递

HoC中指定的 ref,并不会传递到子组件,需要通过回调函数使用 props 传递。

关于“React高阶组件的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: React高阶组件的示例分析

本文链接: https://www.lsjlt.com/news/80225.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React高阶组件的示例分析
    这篇文章将为大家详细讲解有关React高阶组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。高阶组件的定义HoC 不属于 React 的 API,它是一种实现模...
    99+
    2024-04-02
  • React中无状态组件与高阶组件的示例分析
    这篇文章主要介绍React中无状态组件与高阶组件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!无状态组件(Stateless Component) 是 React 0.14...
    99+
    2024-04-02
  • react组件拆分的示例分析
    这篇文章将为大家详细讲解有关react组件拆分的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:React 是一个用于构建用户界面的 JAVASCRIPT 库。主要用于构建UI,很多人认为 R...
    99+
    2023-06-06
  • React之组件的示例分析
    小编给大家分享一下React之组件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、分割 render 函数当一个组件...
    99+
    2024-04-02
  • React Native图片查看组件的示例分析
    这篇文章将为大家详细讲解有关React Native图片查看组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。React Native 图片查看组件:react...
    99+
    2024-04-02
  • 响应式React Native Echarts组件的示例分析
    小编给大家分享一下响应式React Native Echarts组件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言...
    99+
    2024-04-02
  • react高阶组件指的是什么
    这篇文章主要介绍了react高阶组件指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react高阶组件指的是什么文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • React中JSX与react事件的示例分析
    小编给大家分享一下React中JSX与react事件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、JSX1.1、表...
    99+
    2024-04-02
  • React中元素、组件、实例和节点的示例分析
    这篇文章主要介绍React中元素、组件、实例和节点的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!React 深入系列,深入讲解了React中的重点概念、特性和模式等,旨在帮...
    99+
    2024-04-02
  • React事件处理的示例分析
    小编给大家分享一下React事件处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!React的事件处理和DOM的事件处...
    99+
    2024-04-02
  • Vue组件的示例分析
    这篇文章主要介绍了Vue组件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue实例项目启动过程看一下现在我们的项目,想想整个项目...
    99+
    2024-04-02
  • React 高阶组件HOC用法归纳
    一句话介绍HOC 何为高阶组件(HOC),根据官方文档的解释:“高阶组件是react中复用组件逻辑的一项高级技术。它不属于react API的组成部分,它是从react自身组合性质...
    99+
    2024-04-02
  • angular10组件的示例分析
    这篇文章主要介绍了angular10组件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。组件构成要素html模板typescript...
    99+
    2024-04-02
  • react hooks的示例分析
    这篇文章将为大家详细讲解有关react hooks的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。React在16.8版本正式发布了Hooks。关注了很久,最近正...
    99+
    2024-04-02
  • webpack2+React的示例分析
    这篇文章主要为大家展示了“webpack2+React的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“webpack2+React的示例分析”这篇文章吧...
    99+
    2024-04-02
  • React中条件渲染的示例分析
    小编给大家分享一下React中条件渲染的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言在React中,你可以创建不同的组件各自封装你需要的东西。之后你可以只渲染其中的一部分,这...
    99+
    2024-04-02
  • React中受控组件与数据共享的示例分析
    这篇文章主要介绍React中受控组件与数据共享的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:在HTML当中,像<input>,<textarea...
    99+
    2024-04-02
  • Vue中组件的示例分析
    这篇文章将为大家详细讲解有关Vue中组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<body>    <div id=&q...
    99+
    2023-06-25
  • Vue.js中组件的示例分析
    这篇文章将为大家详细讲解有关Vue.js中组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是组件?组件使我们能够将 复杂的 应用程序分解成小块。例如,典型...
    99+
    2024-04-02
  • React高阶组件使用详细介绍
    首先 我们要了解什么是高阶组件 第一 高阶组件必须是一个函数 第二 高阶组件接收一个参数,这个参数也必须是一个组件 第三 他的返回值 也是一个组件 至于高阶组件的作用 我们后续会讲解...
    99+
    2023-01-29
    React高阶组件 React高阶组件的使用 React高阶组件的作用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作