next.js - 未知组件的动态导入 - NextJs
问题描述
我想根据路由动态加载组件。我正在尝试制作一个可以加载任何单个组件以进行测试的页面。
但是,每当我尝试这样做时import(path)
,它都会显示加载程序,但从未实际加载。如果我对包含的完全相同的字符串进行硬编码,path
那么它可以正常工作。是什么赋予了?如何让 nextjs 实际动态导入动态导入?
// pages/test/[...component].js
const Test = () => {
const router = useRouter();
const { component } = router.query;
const path = `../../components/${component.join('/')}`;
console.log(path === '../../components/common/CircularLoader'); // prints true
// This fails to load, despite path being identical to hard coded import
const DynamicComponent = dynamic(() => import(path), {
ssr: false,
loading: () => <p>Loading...</p>,
});
// This seems to work
const DynamicExample = dynamic(() => import('../../components/Example'), {
ssr: false,
loading: () => <p>Loading...</p>,
});
return (
<Fragment>
<h1>Testing {path}</h1>
<div id="dynamic-component">
<DynamicComponent /> <!-- this always shows "Loading..." -->
<DynamicExample /> <!-- this loads fine. -->
</div>
</Fragment>
);
};
export default Test;
解决方案
我把dynamic
组件放在外面,它工作正常。
const getDynamicComponent = (c) => dynamic(() => import(`../components/${c}`), {
ssr: false,
loading: () => <p>Loading...</p>,
});
const Test = () => {
const router = useRouter();
const { component } = router.query;
const DynamicComponent = getDynamicComponent(component);
return <DynamicComponent />
}
推荐阅读
- php - 在回声中更改输入值
- typescript - 棱镜有没有办法根据“有孩子”进行过滤?健康)状况?
- django - 为什么这个 docker compose 文件会构建同一个镜像四次?
- html - Prevent button resizing by the number of words inside the button
- php - 使用 PHP 创建 CSV 文件有错误的行
- python - 比较字符串上的两个数据帧。我想将匹配的字符串分配给右列和行中的数据框之一
- r - 存储在列表中的日期,返回 R 中的数字
- google-sheets - 如果满足条件,则对值求和的动态公式
- html - 试图居中 iframe 元素。尝试了其他问题的解决方案,但没有任何效果
- laravel-backpack - 在 Request select_from_ajax 中获取可重复的 json 数据