Реагировать на отложенную загрузку / приостановку для компонентов с загрузкой данных

Я пытаюсь применить React lazy / Suspense к компоненту, например, с 4 дочерними компонентами. Текущая настройка такова, что при монтировании компонента вызывается запрос graphQL, который отвечает со всеми данными, необходимыми для рендеринга дочерних компонентов. Следовательно, у меня есть обычная настройка, пока данные все еще загружаются:

return (
    {!loading && (
        <>
            <Component1 {...someProps} />
            <Component2 {...someProps} />
            <Component3 {...someProps} />
            <Component4 {...someProps} />
        </>
    )}
    
    {loading && <Loading />}
)

Теперь я хотел бы применить React lazy / Suspense к этому же компоненту, и вот как я это делал до сих пор:

const Component1 = lazy(() => import("./path..."));
const Component2 = lazy(() => import("./path..."));
const Component3 = lazy(() => import("./path..."));
const Component4 = lazy(() => import("./path..."));

...

return (
    <Suspense fallback={<Loading />}>
    {!loading && (
        <>
            <Component1 {...someProps} />
            <Component2 {...someProps} />
            <Component3 {...someProps} />
            <Component4 {...someProps} />
        </>
    )}
    
    {loading && <Loading />}
    </Suspense>
)

Проблема в том, что сейчас 2 <Loading />, один для динамического импорта (из приостановки) и один для асинхронной выборки данных, хотя одновременно отображается только один из них. Я понял, что если я изменю стиль загрузчика саспенса, они будут отображаться в разное время на этапе "загрузки", пока список компонентов, наконец, не отобразится полностью.

Что происходит за кулисами, и правильный ли это способ сделать это (поскольку приостановка для выборки данных все еще экспериментальная)?

0 ответов

Другие вопросы по тегам