HOC 是一个function它将组件作为其参数之一,并以某种方式增强该组件。
如果 HOC 创建一个新的增强组件,是否可以完全不传入任何组件作为参数?
不,那么它就不是 HOC,因为条件之一是它们将组件作为参数之一,并且返回一个具有一些附加功能的新组件。
在这样的示例中,它是较高阶组件、按钮或增强按钮。
EnhanceButton
是 HOC 并且FinalButton
是增强组件。
我尝试创建一个 HOC,如下所示:...运行此命令不会显示 HOC,仅显示 div
那是因为你的createSetup
函数不是 HOC...它是一个返回组件的函数,是的,但它不会将组件作为参数来增强它。
让我们看一个基本 HOC 的示例:
const renderWhen = (condition, Component) =>
props => condition(props)
? <Component {...props} />
: null
);
你可以这样使用它:
const EnhancedLink = renderWhen(({invisible}) => !invisible, 'a');
现在你的EnhancedLink
会像一个a
组件,但如果你传递属性invisible
set to true
它不会渲染...所以我们增强了默认行为a
组件,您可以使用任何其他组件来做到这一点。
在许多情况下,HOC 函数都是柯里化的,并且组件参数放在最后......就像这样:
const renderWhen = condition => Component =>
props => condition(props)
? <Component {...props} />
: null
);
像connect
React-Redux 的功能...这使得组合变得更容易。看一下重组 https://github.com/acdlite/recompose.