Как показать загрузчик через HOC?

#reactjs

#reactjs

Вопрос:

Я хочу использовать специальный компонент для отображения анимации загрузки. У некоторых компонентов есть реквизит «isLoading», а у других «isPending». Как я могу присвоить HOC значение по умолчанию, которое заставит его отображать загрузчик?

 isLoading
isPending
isNotReady
...

  const WithLoader = ControlledComponent => ({ isPending, ...props }) => {
  

Ответ №1:

Вы можете создать компонент более высокого порядка с помощью Loader, как показано ниже:

 export const WithLoader = ControlledComponent => ({
  isLoading, isPending, isNotReady, children,
}) => ((isLoading || isPending || isNotReady) ? <Loader />
  : <>{children}</>
);  

А затем повторно использовать его как:

 <WithLoader>
  <YourComponent />
</WithLoader>  

Или

 <WithLoader>
  <YourComponent1 />
  <YourComponent2/>
</WithLoader>
  

Таким образом, вы можете создать универсальный компонент загрузчика более высокого порядка, который можно использовать даже для нескольких родственных компонентов.

P.S. В приведенном выше примере реализации WithLoader <>{..}</> используются фрагменты react, предполагающие, что вы не хотите иметь никакой дополнительной разметки в DOM. Если вам нужен html-контейнер для целей стилизации, вы можете сделать его <div> тегом вместо React.Фрагмент(<>).

Ответ №2:

Это должно сработать. Предполагая, что имя вашего загружаемого компонента Loading

 const WithLoader = ControlledComponent => ({ isLoading, isPending, isNotReady, ...props }) => { 
  return (isPending || isLoading || isNotReady) ? 
  <Loading /> 
  : 
  <ControlledComponent {...props} />;
}