NextJS 和 Typescript 中的动态路由

问题描述 投票:0回答:1

创建动态路由 [id] 后,它包含 2 个页面,一个是错误所在的服务器端组件,另一个是客户端 PolicyVerificationClient.tsx,它采用参数证书编号和 id。

import {
    doc,
    getDoc
} from 'firebase/firestore';
import {
    db
} from '@/lib/firebase';
import PolicyVerificationClient from './PolicyVerificationClient';
type Props = {
    params: Promise < {
        id: string
    } > ;
    searchParams: {
        [key: string]: string
    };
}
export default async function PolicyVerificationPage({
    params
}: Props) {
    const resolvedParams = await params;
    // Fetch initial data on the server
    let certificateNumber = '';
    try {
        const docRef = doc(db, 'records', resolvedParams.id);
        const docSnap = await getDoc(docRef);
        if (docSnap.exists()) {
            const data = docSnap.data();
            certificateNumber = data.certificateNumber || '';
        }
    } catch (error) {
        console.error('Error fetching record:', error);
    }
    return <PolicyVerificationClient id={resolvedParams.id} initialCertificateNumber={certificateNumber} />;
}

我不断收到类型错误:类型“Props”不满足约束“PageProps”。 属性“searchParams”的类型不兼容。 输入 '{ [key: string]: string |字符串[] |不明确的; }' 缺少类型“Promise”中的以下属性:then、catch、finally、[Symbol.toStringTag]

我尝试了这个,但它没有解决问题 searchParams: Promise<{ [key: string]: string | string[] | undefined }>; // 更新为 Promise

javascript typescript nextjs-dynamic-routing dynamic-routing next.js15
1个回答
0
投票

根据文档

searchParams
应该是一个承诺:

type Props = {
  params: Promise<{ id: string }>
  searchParams: Promise<{ [key: string]: string | string[] | undefined }
};

如果您在页面组件中不使用

seachParams
,则可以将其删除

type Props = {
  params: Promise<{ id: string }>
};
© www.soinside.com 2019 - 2024. All rights reserved.