Компонент автоматически, а затем загрузить тот, который вам нужен. Недостатком здесь является то, что, поскольку он не знает, какой компонент вы загружаете, он должен загрузить их все, и нет никакой гарантии, что они все фактически используются. Это компромисс динамического импорта.

но наткнулся надинамическое предложение импорта а также этоYouTube видео , Мысль была бы отличной идеей использовать его для импорта компонентов по требованию в React.

Столкнувшись с проблемой, когда я не смог «разрешить» путь, когдаimport передается строковые литералы как переменные времени выполнения.

например:

<div>
<button onClick={this._fetchComp.bind(this, "../component/Counter")}>
Get Asyn Comp
</button>
</div>

Пробовал с несколькими опциями для _fetchComp, но передача параметров, похоже, не работает. Разбивка разных вариантов пробовала.

Шаблон строки Не работает : Приведенная ниже ошибка при клике

Error Error: Cannot find module '../components/Counter'. at webpackAsyncContext (^.*$:53)

Код

_fetchComp(res) {
import(`${res}`).then(() => {
    console.log("Loaded")
},(err)=>{
    console.log("Error",err)
})}

Variabes Не работает: Ошибка при сборке веб-пакета 55: 12-23Critical dependency: the request of a dependency is an expression

Код

_fetchComp(res) {
import(res).then(() => {
    console.log("Loaded")
},(err)=>{
    console.log("Error",err)
})}

Строковый литерал Работает : Просто передавая чистые строковые литералы. При нажатии я вижу загрузку чанка на вкладке «Сеть» dev tools.

Код

_fetchComp(res) {
import("../components/Counter").then(() => {
    console.log("Loaded")
},(err)=>{
    console.log("Error",err)
})}

Согласно спецификации,

import () принимает произвольные строки (с указанными здесь строками шаблонов, определяемыми во время выполнения), а не только статические строковые литералы.

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

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

Я оставлю вас всех сCodeSandbox ссылка.

Ответы на вопрос(1)

Ваш ответ на вопрос