条件渲染之react高阶组件——HOC
定义:它接受任何输入(多数时候是一个组件)并返回一个组件作为输出。返回的组件是输入组件的增强版本,并且可以在 JSX 中使用。不是react api而是一种设计模式。
作用:强化组件,复用逻辑,提升渲染性能等
使用方法:
创建一个简单的 HOC,它将一个组件作为输入并返回一个组件。
//一般用“with”前缀来命名 HOC
function withFoo(Component) {return function(props) {return <Component { ...props } />;}
}
es6的写法
const withFoo = (Component) => (props) =>
<Component { ...props } />
使用场景:当你的组件之间出现重复的模式 / 逻辑的时候。
- 条件渲染:例:当加载状态 (isLoading) 为 true 时,组件显示 Loading 组件,否则显示输入的组
件
const Button = ({ onClick, className = '', children }) =><buttononClick={onClick}className={className}type="button">{children}</button>const Loading = () =><div>Loading ...</div>//定义hoc
const withLoading = (Component) => ({ isLoading, ...rest }) =>isLoading? <Loading />: <Component { ...rest } />//实例化一个hoc
const ButtonWithLoading = withLoading(Button);//使用hoc:它接isLoading作为附加属性。当 HOC 消费isLoading时,再将所有其他props 传递给 Button 组件。
<ButtonWithLoadingisLoading={isLoading}onClick={() => this.fetchSearchTopStories(searchKey, page + 1)}>More
</ButtonWithLoading>
优点:组件可以专注于它们的主要用途。the List component can focus on rendering the list. It doesn’t have to bother with a loading status. A HOC hides away all the noise from your actual component.
拓展:其他的条件渲染方法
- if/if else ,局限性:不能在 return 语句和 JSX 中使用(自调用函数除外)
- 三元运算符,可以在 JSX 和 return 语句中使用
- 逻辑 && 运算符:当三元运算的一侧返回 null 时使用,可以在 JSX 和 return 语句中使用
- 解决交叉问题(Cross-Cutting Concerns)
使用高阶组件的注意事项
- :高阶组件不应修改输入组件
- 原因:1)输入之间不能脱离增强组件分别重用 2)其他同样修改了类似的高阶组件,第一个高阶组件功能会被覆盖?
- 更好的解决办法:通过将输入组件包裹在容器组件来实现组合
的组合性,以及提升对 props,state 和视图的可操作性。
- 不要在render函数中使用高阶组件
原因:每次render都会实例化一个新的高阶组件,造成性能消耗,而且卸载组件会造成组件状态和其子元素全部丢失。
应该:在组件定义外应用高阶组件,以便生成的组件只被创建一次。(除非你需要动态的使用高阶组件) - 静态方法必须复制
原因:当你将一个组件应用于高阶组件式,虽然原有的组件被容器组件所包裹,但这新的组件没有之前组件的静态函数
应该:向容器组件中复制原有的静态方法
参考文献:
react学习之道
https://react.html.cn/docs/higher-order-components.html
https://www.robinwieruch.de/react-higher-order-components/
https://juejin.cn/post/6940422320427106335
https://www.robinwieruch.de/react-hooks-higher-order-components/
https://www.robinwieruch.de/react-useeffect-hook/
条件渲染之react高阶组件——HOC相关推荐
- 「react进阶」一文吃透React高阶组件(HOC)
一 前言 React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数.高阶作用用于强化 ...
- [react] 高阶组件(HOC)有哪些优点和缺点?
[react] 高阶组件(HOC)有哪些优点和缺点? HOC 优点 通过传递props去影响内层组件的状态,不直接改变内层组件的状态,降低了耦合度 缺点 组件多层嵌套, 增加复杂度与理解成本 ref隔 ...
- react 高阶组件hoc使用
react 高阶组件hoc使用 1. 为什么使用高阶组件 2. 具体使用 2.1原代码: 2.2 使用hoc封装后 1. 为什么使用高阶组件 高阶组件(HOC)是 React 中用于复用组件逻辑的一种 ...
- React 高阶组件HOC使用总结
HOC(高阶组件) /*HOC(高阶组件): 接收一个组件,返回包装后的组件(增强组件)- 不是React API- 是一种设计模式,类似于装饰器模式- ≈ Mixin && > ...
- react 高阶组件HOC实现组件复用
目录 一 使用步骤 二 显示鼠标坐标 三 鼠标随图片移动 四 设置displayName 五 传递props 高阶组件HOC: Higher-Order Component,是一个函数,接收要包装的组 ...
- React高阶组件(HOC)的写法归纳
react高阶组件的写法总结 什么是高阶组件 高阶组件要解决什么问题 高阶组件的写法 什么是高阶组件 何为高阶组件(HOC),根据官方文档的解释:"高阶组件是react中复用组件逻辑的一项高 ...
- React 高阶组件HOC详解
参考链接: https://juejin.cn/post/6844903815762673671 https://juejin.cn/post/6844904050236850184 前言 高阶组件与 ...
- React 高阶组件HOC、设置displayName、高阶组件传递props
文章目录 1. 高阶组件 使用步骤 2. 高阶组件设置displayName 3.传递props 1. 高阶组件 目的:实现状态逻辑复用.实现功能增强.返回一个增强组件. 高阶组件(HOC,Highe ...
- React高阶组件(HOC)模型理论与实践
什么是HOC? HOC(全称Higher-order component)是一种React的进阶使用方法,主要还是为了便于组件的复用.HOC就是一个方法,获取一个组件,返回一个更高级的组件. 什么时候 ...
最新文章
- 百度分享插件wbuid属性无法@指定微博
- java 共享session_java session共享
- java基础—IO流概述
- comsol 超声声场模拟_新品上市 | COMSOL 物理仿真软件全新发布5.6 版本并推出四个新模块...
- 算法高级(6)-共识(Raft)算法
- vue和react的diff算法对比
- SVM多分类问题 :matlab中的应用
- 深入浅出Fetch-API【转】
- java单链表删除重复元素_用加头节点实现链表的删除重复元素、分割、翻转(Java实现)...
- 114.二叉树展开为链表
- 深度理解linux内核零拷贝,面试题:如何理解 Linux 的零拷贝技术?
- java新手代码翻译成中文_急!老师让我把以下代码翻译成中文的
- 图中PNP型三极管发射极和基极为什么要加个100K(R21)的电阻?
- kali破解wifi 密码(仅供学习)
- Java前方交会后方交会编程_摄影测量后方交会、前方交会程序
- 由浅入深玩转华为WLAN—12安全认证配置(5)Portal认证,外置Protal服务器TSM对接
- 继上篇,关于Rxjava,让你知道什么叫“大海无量”
- 谈谈 2020 年程序员收入报告
- 计算机系高考激励的句子,高考激励人心的句子及图片
- C++模板——template
热门文章
- 计算关联度矩阵matlab,计算关联度matlab
- win版敬业签怎么通过便签快捷键对便签内容执行标记已完成操作?
- 如何在网站左侧和右侧的漂浮图片上添加QQ咨询、旺旺、微博、电话?
- FairyGUI学习使用
- JSD-2204-配置Java环境变量-安装idea-Java语言基础-Day01
- 一月笔记-JAVA-超市管理系统
- 等级保护测评备案业务中十个常见问题解答
- 腾讯应用宝:首次上传演示视频需要去腾讯视频进行实名认证的操作
- 西部数码建站助手无法启动mysql_西部数码使用指南:网站管理助手打开报错检查...
- Android实时模糊