#reactjs #frontend #lazy-loading #preact
Вопрос:
Я пытаюсь использовать ленивую загрузку в preact, и это мой код ( routes/form-page.js
):
import {lazy, Suspense} from 'preact/compat';
.
.
.
const Form = lazy(() => import("../components/form"));
const FormPage = () => {
const classes = useStyles();
return (
<Grid container justifyContent="center" className={classes.root}>
<Suspense fallback={<Grid item xs={10} className={classes.suspense}>Loading ...</Grid>}>
<Form/>
</Suspense>
</Grid>
)
};
это нормально в разработке, но при построении (запуске preact build
) он возвращает ошибку:
ERROR Template execution failed: [object Promise]
что случилось?
Комментарии:
1. Какой инструмент сборки вы используете? Как вы лениво импортируете
Form
?2. Вы используете Preact-CLI? Если это так, я не верю, что ожидание поддерживается. Однако есть и другие способы разделения кода, поэтому я напишу ответ, показывающий, как это сделать.
Ответ №1:
С помощью Preact-CLI приостановка не поддерживается при предварительном запуске. См. preact-cli#1359. Вы можете отключить предварительный просмотр с preact build --no-prerender
помощью .
Существуют и другие методы разделения кода, описанные в файле ReadMe проекта, такие как использование определенных каталогов или использование async!
префикса при импорте.
Ответ №2:
Я думаю, что в настоящее время это экспериментальная функция, и это ошибка в preact.
Комментарии:
1. Нет, это не имеет никакого отношения к Преакту. Средство сборки, Preact-CLI, не поддерживает приостановку при предварительном запуске. Это известное ограничение, и для него открыта существующая проблема, см. раздел preact-cli#1359 .