reactjs - Reactjs 使用默认导出功能动态导入 js 文件
问题描述
我有一个 reactjs 应用程序在 MyApp 组件中,我在顶部使用了一个导入,如下所示:
import { ProvideAuth } from "util/auth.js";
在内部这个文件 util/auth.js 我有这个代码(我像这样在顶部导入另一个 js 文件):
import analytics from "./analytics";
export function ProvideAuth({ children }) {
.....
}
如何根据 cookie 值动态地从“./analytics”进行导入分析?我制作了这段代码,但它不起作用:
function loadLazyModule() {
console.log("loadLazyModule");
const _module = React.lazy(() =>
import("./analytics.js")
);
return _module;
}
// Provider hook that creates auth object and handles state
export function ProvideAuth({ children }) {
if (statisticsCookie == 'Y') {
console.log("statisticsCookie", statisticsCookie);
loadLazyModule();
}
.....
}
最后我的analytics.js 有这个代码:
// Initialize analytics and plugins
// Documentation: https://getanalytics.io
const analytics = Analytics({
debug: process.env.NODE_ENV !== "production",
plugins: [
googleAnalyticsPlugin({
trackingId: process.env.NEXT_PUBLIC_GA_TRACKING_ID,
}),
],
});
....
export default analytics;
仅当我的 cookie 已启用(值为“Y”)时,我才需要导入此文件:
import analytics from "./analytics";
请帮帮我!谢谢!
解决方案
你可以这样做。之后你也可以使用 .than().catch() 函数。
async function load() {
let say = await import('./say.js');
say.hi(); // Hello!
say.bye(); // Bye!
say.default(); // Module loaded (export default)!
}
或通过导入模块
let modulePath = prompt("Which module to load?");
import(modulePath)
.then(obj => <module object>)
.catch(err => <loading error,e.g. if no such module>)
推荐阅读
- r - 如何保留重复多次的字符串?
- apache-flink - 持久化 Apache Flink 窗口
- java - jooq 比较 2 个日期 - 它不喜欢 java.sql.Date
- rust - 错误:POE 教程中缺少 `#[pallet::config]` 错误
- dart - 飞镖流会带来额外的开销吗?
- c# - 获取 ms 图形令牌失败
- excel - Excel VBA 打开 Internet Explorer
- usb - 所有 USB 都使用差分协议(D+ 和 D-)吗?或者是一些TX和RX?
- java - Spring:用一个没有连接列的行表连接实体
- sql - 如何将日期格式更改为年和月,但必须保留为日期值而不是 varchar 或 char ..?