首頁  >  問答  >  主體

如何用只有掛載後才能存取的資料來初始化鉤子?

這是我正在嘗試做的事情的範例:

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粉801904089P粉801904089216 天前356

全部回覆(1)我來回復

  • P粉432930081

    P粉4329300812024-02-18 00:50:24

    由於您使用的是 nextjs,因此您可以利用 getServerSideProps 為您的元件產生 id 作為初始道具,因此它將始終被定義:

    export async function getServerSideProps({ params }) {
      const id = params.id;
    
      return {
        props: {
          id,
        },
      };
    }
    
    

    並且您從元件中收到它作為道具:

    export default function Test({id}){
     //...
    }
    

    回覆
    0
  • 取消回覆