10-高阶组件

7/24/2023

# 一,高阶组件

# 1,高阶组件

HOC = Higher Order Compoent。高阶组件是类组件编程中一种非常重要的代码逻辑复用技巧。随着Hook的流行,高阶组件用的越来越少了。

vue中的代码复用技巧:

  • 组件
  • minix
  • 插件
  • 自定义指令
  • 过滤器
  • Vue原型

在React中,如果是类组件,可能通过HOC实现代码的复用。

写代码看一下,高阶组件的使用,如下:

1675321756189

可以使用ES6中的装饰器语法,如下:

1675321855888

高阶组件可以简写,如下:

1675321939572

foo就可以叫高阶组件,也叫高阶函数,接收一个组件作为入参,经过一翻装饰(仅仅是装饰),最后返回一个新的组件。对入参组件是不能修改的。

前面返回的新组件是一个类组件,现在这让它返回函数组件,如下:

1675322179776

高阶组件还有一种定义方法,如下:

1675322455054

上面的代码可以简写,如下:

1675322705950

还可以简写,如下:

1675322750933

1675322784322

高阶组件的定义方式通常有两种:

第一种:const hoc = (WC) => props => (<jsx/>)     使用: hoc(DemoA)
第二步:const hoc = (...arg) => WC => props => (<jsx/>)   使用:hoc(1,2)(DemoA)
1
2

传参问题,如下:

1675323181055

可以装饰多次,如下:

1675323274464

把上面装饰的写法,换成函数调用如下:

1675323352955

1675323382883

DemoA组件接收的props,如下:

1675323469841

1675323509052

在使用高阶组件时,有可能造成props丢失,如何解决props丢失问题?

答:需要使用props穿透来解决。

想获取所有的props,如下:

1675323670344

上面的foo和bar都可以叫高阶组件,使用:

  • 在类组件上可以通过 hoc(DemoA) , 还可以通过ES6中的装饰器
  • 在函数组件上,只能通过 hoc(DemoA)

# 2,高阶组件的应用

高阶组件应用的也非常多,如下:

  • 路由中的withRouter()
  • Redux中的connect()
  • Mobx中的inject和observer()
  • 利用高阶组件,可以给每个项目添加公司的视图结构
  • 实现后面管理系统中的水印
  • 实现权限校验
  • 把重复的业务功能封装到高阶组件,如:埋点,DOM操作,BOM操作...
  • .....

封装一个高阶组件,可以给不同的页面添加不同的title,如下:

1675325015589

Last Updated: 5/17/2023, 11:37:25 AM