到目前为止,我们已经习惯了 Flux 流,其中数据通过 props 输入到组件中。因此,您可以查看 Props 签名并了解组件要求是什么。
Hooks 是一个了不起的特性,但是当我们过渡到它们时,我发现它们为依赖项提供了另一个入口,它更难管理,因为你必须查看实际的组件代码才能看到它。
当然,我们只能在容器组件中使用 Hooks,但我觉得它们的一些主要卖点是它们能够减少嵌套和 HOC。
决定哪个组件应该使用钩子以及哪个应该使用渲染props的最佳实践(当前)是什么?
到目前为止,我们已经习惯了 Flux 流,其中数据通过 props 输入到组件中。因此,您可以查看 Props 签名并了解组件要求是什么。
Hooks 是一个了不起的特性,但是当我们过渡到它们时,我发现它们为依赖项提供了另一个入口,它更难管理,因为你必须查看实际的组件代码才能看到它。
当然,我们只能在容器组件中使用 Hooks,但我觉得它们的一些主要卖点是它们能够减少嵌套和 HOC。
决定哪个组件应该使用钩子以及哪个应该使用渲染props的最佳实践(当前)是什么?
Hooks 和 HOCs 是不同的编程模型,比较它们就像比较橙子和苹果一样。
TL; 博士
根据经验,当我想要组件的条件渲染(如果条件:渲染 A,否则渲染 B)时,我使用 HOC,否则,我使用钩子。这只是我的意见。
HOC 优点
HOC 的缺点
x
。HOCs Pro & Con
钩子的优点
钩子的缺点
并且根据React FAQs hooks可以用作renderProps
and的替代HOCs
,但可以与它们共存
通常,渲染props和高阶组件仅渲染一个子组件。我们认为 Hooks 是一种更简单的方法来服务于这个用例。这两种模式仍有一席之地(例如,虚拟滚动组件可能有一个 renderItem props,或者可视化容器组件可能有自己的 DOM 结构)。但在大多数情况下,Hooks 就足够了,可以帮助减少树中的嵌套。
Hooks 允许在功能组件中有状态逻辑,并且类似于 React 中的类组件。
钩子更难管理,因为你必须查看实际的组件代码才能看到它。
并非如此,因为您可以在自定义钩子中提取您的 HOC 或 renderProps 中的自定义逻辑并查找其实现,而不是了解实际组件中实际发生的情况。
我经常看到的一件事是在组件中使用带有副作用的钩子。这会使您的组件更难测试,并且对于钩子来说不是一个好的用例,恕我直言。
例如,您使用一些自定义创建一个组件,const {data, loading, error} = useFetch(endpointUrl)
然后直接return <>{data.name}</>
在同一组件的渲染部分中使用它。
对我来说,这仍然是 HOC 的一个用例。在 HOC 中加载数据,将其作为属性提供给静态转储组件。通过这种方式,您可以更轻松地测试组件,并且仍然可以分离关注点。