阅读之前,首先要问下自己:前端为什么要进行组件化开发
什么是高阶组件?
高阶组件就是一个函数
,该函数的特点是需要给它传递一个组件作为参数(参数还可以包含其他的数据),它会返回一个新的组件。
高阶组件定义示例:
1 | import React, { Component } from 'react' |
为什么要使用高阶组件?
高阶组件的作用:为了组件间的代码复用。
组件可能有着某些相同的逻辑,把这些逻辑抽离出来,放到高阶组件中进行复用。高阶组件内部的包装组件和被包装组件之间通过props
传递数据。
如何使用高阶组件?
高阶组件使用示例:
InputWithUserName的功能需求是挂载的时候从localStorage里面加载username字段作为<input />
的value值。
1 | import wrapWithLoadData from './wrapWithLoadData' |
最终调用的该组件实际是用了被加工过的组件:
1 | import InputWithUserName from './InputWithUserName' |
新的需求:另外一个文本输入框组件,它需要从LocalStorage加载content字段的数据。
1 | import wrapWithLoadData from './wrapWithLoadData' |
高阶组件使用分析:
上面使用的两个组件InputWithUserName
和TextareaWithContent
在需求上有一个相同的逻辑:都是在
挂载阶段从LocalStorage中加载特定字段数据。
如果不使用高阶组件,我们可能是针对每一个组件都加上componentWillMount
生命周期,然后在里面调用
LocalStorage。后期假设需求改成使用aja获取而不是从LocalStorage获取,不使用高阶组件的话我们需要针对
每一个组件进行逻辑代码的修改,而使用高阶组件的话只需要修改高阶组件里面的逻辑,然后修改下引入的
高阶组件(包装函数)的名称就行了。
使用高阶组件,就是把这些组件里面的相同逻辑抽离出来放入到一个包裹函数中。使用不同组件的时候都调用该高阶
组件实现其已经封装好的功能,而不需要自己单独去实现。这样减少了开发单独组件所需的代码,充分复用了逻辑
代码。
References