в течение моего времени, потраченного на реакцию, и в нескольких статьях я спрашиваю себя, как реорганизовать 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;
в соответствии с официальной документацией:
Заменители ли крючки реквизит рендера и компоненты более высокого порядка?
Часто рендерреквизиты и компоненты высшего порядка отображают только одного потомка.Мы думаем, что крючки - более простой способ обслуживания этого варианта использования.Для обоих шаблонов все еще есть место (например, у компонента виртуальной скроллера может быть свойство renderItem или у компонента визуального контейнера может быть своя собственная структура DOM).Но в большинстве случаев хуков будет достаточно и они могут помочь уменьшить вложение в вашем дереве.
Я использую этот HOC только для добавления некоторого предопределенного пространства для компонента.
было бы действительно лучше перефразировать это как ловушку, не могли бы вы объяснить, почему?
, если да, каков будет наилучший способ рефакторинга этого как крючка?