首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >react 高阶组件的代理模式

react 高阶组件的代理模式

作者头像
西南_张家辉
发布于 2021-02-02 10:01:20
发布于 2021-02-02 10:01:20
1.2K0
举报
文章被收录于专栏:张家辉的树屋张家辉的树屋

说明

react 高阶组件

  • 在目前的前端社区,『推崇组合,不推荐继承(prefer composition than inheritance)』

什么是高阶组件?

  • 一个高阶组件只是一个包装了另外一个组件的 react 组件。
  • 通常这是一个函数,本质上是一个类工厂函数(class factoy)
理解一个函数
代码语言:javascript
复制
hocFactory:: W: React.Component => E: React.Component

这里 W(WrappedComponent) 指被包装的 React.Component,E(Enhanced Component) 指返回的新的高阶 React 组件。

  • 包装
    • 1、属性代理(props proxy): 高阶组件操控传递给 wrappedComponent 的 props
    • 2、反向代理(inheritance inversion): 高阶组件继承(extends)

高阶组件用在什么地方?

  • 代码复用,逻辑抽象,抽离底层准备(bootstrap)代码
  • 渲染劫持
  • State 抽象和更改
  • Props 更改

可用的地方非常多,下面我们先来实现一个高阶组件

高阶组件的实现

  • 当然其中实现的方法主流的包括我们上面提到的,属性代理和反向继承两种方法。
  • 这两种方法中又包括了几种包装 WrappedComponent 的方法

Props Proxy(属性代理 PP)

代码语言:javascript
复制
function ppHOC(WrappedComponent) {
  return class PP extends React.Component {
    render() {
      return <WrappedComponent {...this.props}/>
    }
  }
}

复制代码

可以看到,这里高阶组件的 render 方法返回了一个 type 为 WrappedComponent 的 React Element(也就是被包装的那个组件),我们把高阶组件收到的 props 传递给它,因此得名 Props Proxy。

未完待续

  • 高阶组件有很多知识点,后续补上,本次为了给前面两篇文章的装饰器用到的高阶组件做解释。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • react 高阶组件
    • 什么是高阶组件?
      • 理解一个函数
  • 高阶组件用在什么地方?
  • 高阶组件的实现
    • Props Proxy(属性代理 PP)
  • 未完待续
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档