У меня сейчас ментальный блок, у меня есть компонент HOC, который проверяет флаг функции, как показано ниже:
const withEnabledFeatures = (WrappedComponent: any) => {
class WithEnabledFeatures extends React.Component<any> {
enabledFeatures = (): Array<string> => {
if (window === undefined) return [];
return window.AH.featureFlags;
}
isFeatureEnabled = (feature: string): boolean => {
return this.enabledFeatures.includes(feature);
}
render() {
return (
<WrappedComponent
enabledFeatures = {this.enabledFeatures()}
isFeatureEnabled = {this.isFeatureEnabled}
{...this.props}
/>
)
}
}
};
export default withEnabledFeatures;
И я буду использовать это как опору в другом компоненте, скажем
isFeatureEnabled('feature_a');
Который вернет true, если он существует, или false, если нет.
Мой вопрос, моя функция isFeatureEnabled правильная?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добавлен возврат внутри HOC для WithEnabledFeatures, а также исправлен оператор возврата isFeatureEnabled.
const withEnabledFeatures = (WrappedComponent: any) => {
return class WithEnabledFeatures extends React.Component<any> {
enabledFeatures = (): Array<string> => {
if (window === undefined) return [];
return window.AH.featureFlags;
}
isFeatureEnabled = (feature: string): boolean => {
return this.enabledFeatures().includes(feature);
}
render() {
return (
<WrappedComponent
enabledFeatures = {this.enabledFeatures()}
isFeatureEnabled = {this.isFeatureEnabled}
{...this.props}
/>
)
}
}
};
export default withEnabledFeatures;
Нет, вы не вызываете this.enabledFeatures как метод, вы пытаетесь получить доступ к члену на нем. Используйте this.enabledFeatures(). Кроме того, фабричный метод HOC не возвращает расширенный класс.
const withEnabledFeatures = (WrappedComponent: any) => {
return class WithEnabledFeatures extends React.Component<any> {
enabledFeatures = (): Array<string> =>
(window === void 0) ? [] : window.AH.featureFlags;
isFeatureEnabled = (feature: string): boolean =>
this.enabledFeatures().includes(feature); // <-- Here, ()
render() {
return (
<WrappedComponent
enabledFeatures = {this.enabledFeatures()}
isFeatureEnabled = {this.isFeatureEnabled}
{...this.props}
/>
)
}
}
};
export default withEnabledFeatures;
(Я также при желании сжал ваш код и добавил передовой опыт, void 0)
Внутри
HOCвы забылиreturn WithEnabledFeatures