[英]How to both dynamically import and render a component on button click in nextjs?
我知道本主题中有几个 nextjs 和 reactjs 问题,但我认为这足够具体,可以单独讨论。 所以我有一个 NextJS 项目,我希望按钮在单击时消失,然后动态导入组件并呈现它。
由于两件事,动态导入组件至关重要。
到目前为止,这是我的 index.js 代码:
import Head from "next/head"; import Image from "next/image"; import Link from "next/link"; import dynamic from "next/dynamic" import React, { useEffect, useState } from "react"; import { Inter } from "@next/font/google"; const inter = Inter({ subsets: ["latin"] }); export default function Home() { return ( <> <Head> <title>My page</title> <meta name='description' content="Some desc. content" /> <meta name='viewport' content='width=device-width, initial-scale=1' /> <link rel='icon' href='/favicon.ico' /> </Head> <button onClick={initSurvey()}>Initialize.</button> </> ) } function initSurvey(){ console.log("The button is working.") const Survey = dynamic(() => import(",:/components/SurveyComponent"), { ssr: false, }) }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
请记住,这不是我能做的全部,我只是清理了失败的尝试,以便为您提供一个清晰、可读和可理解的片段。
先感谢您!
通过查看React.lazy文档和本指南,我设法找到了这个解决方案:
import { lazy, Suspense, useState } from "react";
const dynamicComponent = lazy(() => import('../components/MyDynamicComponent');
export default function Home() {
const [dynComp, setDynComp] = useState(<div/>);
const loadDynamicComponent = () => {
return (
<Suspense fallback={<div>Loading...</div>}>
<dynamicComponent/>
</Suspense>
)
}
return (
<>
<button onClick={ () => setDynComp(<div>{loadDynamicComponent()}</div>)}>Initialize!</button>
{ dynState }
</>
);
}
测试一下,让我知道它是否对您有帮助!
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.