在我花时间在 react 和几篇文章上,我问自己如何将 HOC 重构为钩子,以及它是否有用以及为什么,
这是一个需要重构的小组件
function withSpacing(Component) {
const WrappedWithSpacing = ({
pv, ph, pt, pb, pl, pr, style, ...props
}) => {
const styleWithSpacing = {};
const spacing = layout.padding;
const paddingTop = pt || pv;
const paddingBottom = pb || pv;
const paddingRight = pr || ph;
const paddingLeft = pl || ph;
if(paddingTop > 0) styleWithSpacing.paddingTop = paddingTop * spacing;
if(paddingBottom > 0) styleWithSpacing.paddingBottom = paddingBottom * spacing;
if(paddingLeft > 0) styleWithSpacing.paddingLeft = paddingLeft * spacing;
if(paddingRight > 0) styleWithSpacing.paddingRight = paddingRight * spacing;
return <Component style={{...style, ...styleWithSpacing}} {...props} />
}
WrappedWithSpacing.propTypes = {
pv: PropTypes.number,
ph: PropTypes.number,
pt: PropTypes.number,
pb: PropTypes.number,
pl: PropTypes.number,
pr: PropTypes.number,
style: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
}
WrappedWithSpacing.defaultProps = {
pv: 0,
ph: 0,
pt: 0,
pb: 0,
pr: 0,
pl: 0,
}
return WrappedWithSpacing;
}
export default withSpacing;
根据官方文档:
Hooks 会取代渲染道具和高阶组件吗?
通常,渲染道具和高阶组件只渲染一个孩子。我们认为 Hooks 是服务于这个用例的一种更简单的方式。这两种模式仍然存在(例如,一个虚拟滚动组件可能有一个 renderItem 属性,或者一个可视容器组件可能有它自己的 DOM 结构)。但在大多数情况下,Hooks 就足够了,并且可以帮助减少树中的嵌套。
我使用这个 HOC 只是为了给组件添加一些预定义的空间。
将它重构为钩子真的会更好,你能解释一下为什么吗?
如果是,将其重构为 hook 的最佳方法是什么?