如何用只有挂载后才能访问的数据来初始化钩子?
P粉801904089
P粉801904089 2024-02-17 22:35:42
0
1
408

这是我正在尝试做的事情的示例:

import { useRouter } from "next/router";

import { useCollection } from "react-firebase-hooks/firestore";
import { db } from "@/firebase/clientApp";
import { collection } from "firebase/firestore";

export default function Test(){
    const router = useRouter();
    const {id} = router.query
    const [data, dataLoading, dataError] = useCollection(collection(db, "drafts", id), {})

    return(
    <div>Hello!</div>
    )
}

如您所见,我使用 id 的值来初始化 useCollection 挂钩。但是,id 会发生变化,并且首先是未定义的,然后更改为正确的值。这使得整个事情崩溃了,上面的内容在打字稿中甚至无效。我需要在定义 id 之后初始化 useCollection 钩子,这仅在组件“安装”之后。我尝试将 useCollection(...) 放在 useEffect 中,但它不起作用。

P粉801904089
P粉801904089

全部回复(1)
P粉432930081

由于您使用的是 nextjs,因此您可以利用 getServerSideProps 为您的组件生成 id 作为初始道具,因此它将始终被定义:

export async function getServerSideProps({ params }) {
  const id = params.id;

  return {
    props: {
      id,
    },
  };
}

并且您从组件中收到它作为道具:

export default function Test({id}){
 //...
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板