You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js页面如何动态导入TS导出的数组数据而非完整组件

错误原因

你遇到的报错是因为普通React组件(非服务端组件)不支持声明为async函数,async函数执行后返回的是Promise对象,React无法直接将Promise作为渲染内容输出。

解决方案1:使用Pages Router原生数据获取方法(推荐,利于SEO)

你用的是Next.js的Pages Router,直接把动态导入逻辑放到getStaticProps(静态生成场景)或getServerSideProps(服务端渲染场景)中即可,数据会作为props传递给页面组件,无需把页面组件改为async:

// pages/page.tsx
// 页面组件改为普通同步函数,直接接收items作为props
const Page = ({ t, items, ...props }: Props) => {
    return (
        <>
            <Head>
                <title>dynamic test</title>
            </Head>
            <MyPage items={items} />
        </>
    );
};

// 静态生成场景用getStaticProps,构建/增量更新时预取数据
export const getStaticProps = async (context) => {
    const locale = context.locale;
    const items = (await import(`../page-data/myitems/${locale}`)).default;
    return {
        props: {
            items,
        },
        // 可选:开启增量静态再生,单位为秒
        revalidate: 86400
    };
};

如果需要每次请求都获取最新数据,把getStaticProps换成getServerSideProps即可,写法逻辑完全一致。

解决方案2:客户端侧异步加载(适合无SEO要求的场景)

如果不需要服务端渲染该部分内容,可以在组件内用useState+useEffect实现异步加载,加个加载态处理即可:

import { useEffect, useState } from 'react';

const Page = ({ t, ...props }: Props) => {
    const [items, setItems] = useState<{title: string, category: string}[]>([]);
    const [loading, setLoading] = useState(true);
    const locale = props._nextI18Next.initialLocale;

    useEffect(() => {
        const loadItems = async () => {
            const loadedItems = (await import(`../page-data/myitems/${locale}`)).default;
            setItems(loadedItems);
            setLoading(false);
        };
        loadItems();
    }, [locale]);

    // 加载中显示占位内容
    if (loading) return <div>加载中...</div>;

    return (
        <>
            <Head>
                <title>dynamic test</title>
            </Head>
            <MyPage items={items} />
        </>
    );
};

内容的提问来源于stack exchange,提问作者Kristi Jorgji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:07