最近偶然发现了动态导入提案以及这个Youtube视频。想着用它来实现React组件的按需导入是一个好主意。
但我遇到了一个问题,当import
传递字符串字面量作为运行时变量时,无法“解析”路径。
例如:
<div>
<button onClick={this._fetchComp.bind(this, "../component/Counter")}>Get Async Comp</button>
</div>
尝试了多种_fetchComp选项,但似乎传递参数不起作用。以下是尝试的各种选项的分解。
- 模板字符串 不起作用:在单击时出现以下错误
错误:无法找到模块“../components/Counter”。在webpackAsyncContext(^.* $: 53)
代码
_fetchComp(res) {
import(`${res}`).then(() => {
console.log("Loaded")
},(err)=>{
console.log("Error",err)
})}
- 变量 无法正常工作: 在webpack构建过程中出现错误,位置为55:12-23
关键性依赖项:一个依赖项的请求是一个表达式
**Code**
_fetchComp(res) {
import(res).then(() => {
console.log("Loaded")
},(err)=>{
console.log("Error",err)
})}
字符串字面值 运作良好:仅传递纯字符串字面量。单击时,我能够在开发工具的网络选项卡中看到正在下载的代码块。
代码
_fetchComp(res) { import("../components/Counter").then(() => { console.log("Loaded") },(err)=>{ console.log("Error",err) })}
根据规范,
因此我原本希望使用字符串字面量来完成,但似乎并不是这种情况。import()接受任意字符串(这里展示了动态确定的模板字符串),而不仅仅是静态字符串字面量。
我在flow问题追踪器上遇到了类似的问题。但所提出的解决方案再次倡导使用字符串字面量。
我会留下一个CodeSandbox链接。
create-react-app
进行了测试,这不是一个很好的客户端设置来处理动态导入吗? - semuzaboi