Я изучаю концепции <Suspense>
и React.lazy()
и хотел бы лучше понять, что происходит, чтобы добавить некоторую логику в существующее приложение.
Давайте начнем с определений:
Функция React.lazy позволяет визуализировать динамический импорт как обычный компонент.
( визуализация выделена мной)
и
Если модуль, содержащий OtherComponent, еще не загружен к моменту рендеринга MyComponent, мы должны показать некоторый запасной контент, пока ожидаемчтобы загрузить [...]
( загружено выделено мной)
Теперь в определении Suspense
используется термин load , lazy()
использует рендер .
Давайте добавим немного кода в концепцию.
const ComponentOne = React.lazy(() => import("./ComponentOne"));
const ComponentTwo = React.lazy(() => import("./ComponentTwo"));
function BigBang() {
return (
<Suspense fallback={<SplashScreen/>}>
<section>
<ComponentOne/>
<ComponentTwo/>
</section>
</Suspense>
);
}
Fine.Идея в том, что мы лениво загружаем ComponentOne и ComponentTwo.Пока этот процесс не закончен, мы отобразим SplashScreen.
ВОПРОС Теперь давайте предположим, что у меня есть некоторые импортные данные для некоторых локальных изображений в ComponentOne и ComponentTwo (я добавлю только коддля одного, давайте предположим, что есть что-то похожее для другого):
import avatar from "../../img/avatar.svg";
import logo from "../../img/logo.svg";
export default class ComponentOne extends React.Component {
componentDidMount() {
console.log("ComponentOne@componentDidMount");
}
render() {
console.log("ComponentOne@render");
return (
<div style={{display: 'none'}}>
<img src={avatar}/>
<img src={logo}/>
</div>
);
}
}
Теперь должно быть ясно, что я хотел бы спросить:
Исчезает ли SplashScreen, когда ВСЕ импортируетзагружены?Другими словами, когда исчезает SplashScreen, могу ли я предположить, что все изображения в ComponentOne и ComponentTwo уже загружены?
Это основной вопрос.
Вторичный вопрос (который кажется связаннымдля меня, но если это не так, я могу открыть другую ветку): если ответ на предыдущий вопрос «НЕТ», какова лучшая стратегия, чтобы быть уверенным, что images / fonts / «api response» / «other resources»загружаются перед рендерингом, возможно, поддерживая логику из-за уже существующего потока?Прямой fetch()
к ресурсам в настоящее время не поддерживается.