You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importReact,{Component}from'react';exportdefault(WrappedComponent)=>{returnclassEnhancedComponentextendsComponent{// do somethingrender(){return<WrappedComponent/>;}}}
面试官:说说对高阶组件的理解?应用场景?
一、高阶组件
高阶函数(Higher-order function),至少满足下列一个条件的函数
在
React
中,高阶组件即接受一个或多个组件作为参数并且返回一个组件,本质也就是一个函数,并不是一个组件上述代码中,该函数接受一个组件
WrappedComponent
作为参数,返回加工过的新组件EnhancedComponent
高阶组件的这种实现方式,本质上是一个装饰者设计模式
二、如何编写
最基本的高阶组件的编写模板如下:
通过对传入的原始组件
WrappedComponent
做一些你想要的操作(比如操作 props,提取 state,给原始组件包裹其他元素等),从而加工出想要的组件EnhancedComponent
把通用的逻辑放在高阶组件中,对组件实现一致的处理,从而实现代码的复用
所以,高阶组件的主要功能是封装并分离组件的通用逻辑,让通用逻辑在组件间更好地被复用
但在使用高阶组件的同时,一般遵循一些约定,如下:
这里需要注意的是,高阶组件可以传递所有的
props
,但是不能传递ref
如果向一个高阶组件添加
refe
引用,那么ref
指向的是最外层容器组件实例的,而不是被包裹的组件,如果需要传递refs
的话,则使用React.forwardRef
,如下:三、应用场景
通过上面的了解,高阶组件能够提高代码的复用性和灵活性,在实际应用中,常常用于与核心业务无关但又在多个模块使用的功能,如权限控制、日志记录、数据校验、异常处理、统计上报等
举个例子,存在一个组件,需要从缓存中获取数据,然后渲染。一般情况,我们会如下编写:
上述代码当然可以实现该功能,但是如果还有其他组件也有类似功能的时候,每个组件都需要重复写
componentWillMount
中的代码,这明显是冗杂的下面就可以通过高价组件来进行改写,如下:
再比如组件渲染性能监控,如下:
参考文献
The text was updated successfully, but these errors were encountered: