Вы все еще можете передать реквизиты вместе с Компонентом, который будет улучшен (в соответствии с вашим первоначальным подходом, который вы считаете неправильным). Это правильно, поскольку -
HOC не являются частью React API. Они вытекают из природы состава React.
Таким образом, ваше использование HOC -
const EnhancedComponent = higherOrderComponent(WrappedComponent, anyProps);
Обращает на себя внимание:
- Ваш HOC принимает Компонент ивозвращает Компонент (улучшенный или нет)
const higherOrderComponent = (WrappedComponent, anyProps) => {
return class extends React.Component {
// Component body
}
}
Не изменяйте оригинальный компонент. Используйте композицию. Передайте несвязанный реквизит обернутому компоненту.
const higherOrderComponent = (WrappedComponent, anyProps) => {
return class extends React.Component {
render() {
const { HOCProp, ...compProps } = this.props;
return (
<WrappedComponent
...compProps,
someProp={anyProps.someProp}
/>
);
}
}
}
Учитывая все это, ваш HOC будет выглядеть так -
const withWrappedIcon = (CompToWrap, iconStyle) => {
return (
<Icon className={iconStyle}>
<CompToWrap />
</Icon>
);
}