搜索

首页  >  问答  >  正文

利用前端React Query集成的NextJS服务器端渲染

我目前有以下 React 查询实现:

const { data, isSuccess, isLoading } = useQuery(['myQuery', myParams], async () => {
    return myAjaxCall(myParams);
}, {
    cacheTime: 0
});

我将返回的结果传递给自定义组件:

<Results foundRecords={data}/>

我正在将初始搜索结果传递到我的父页面组件中,以便搜索引擎抓取工具能够在初始页面加载时看到结果(如果请求是在客户端发出的 - 即使用 useQuery())。

在这种情况下,将传递到组件中的初始搜索值(通过 NextJS 的 getServerSideProps())与 useQuery() 实现集成的最佳方法是什么?

从我的头顶来看,它看起来像:

export async function getServerSideProps(context){
    ...
    return {
       initialData: ....
    }
}

export default function MyPage({initialData}){
    const { data, isSuccess, isLoading } = useQuery(['myQuery', myParams], async () => {
        return myAjaxCall(myParams);
    }, {
        cacheTime: 0
    });

    return (
        <Results foundRecords={initialData || data}/>   
    )
}

P粉790187507P粉790187507239 天前449

全部回复(2)我来回复

  • P粉726133917

    P粉7261339172024-03-29 14:01:28

    为了获取 Google 抓取工具的结果,您需要使用标题和说明中提供的元数据,还需要在 Google 控制台中提交您的域名

    export default function Mypage({user}) {
        
          return (
            <>
              
                
                
                
                My page
                
                //Open Graph meta tags...
              
              <>Home
            ) 
     }
        
        
    export async function getServerSideProps ({ req }) { 
      const user ={...}
      return {props: {user: user}} 
    }

    回复
    0
  • P粉799885311

    P粉7998853112024-03-29 13:29:27

    文档建议将数据放入useQuery的initialData中。然后,您可以继续使用从 useQuery 返回的 data

    export async function getServerSideProps(context){
        ...
        return {
           initialData: ....
        }
    }
    
    export default function MyPage({initialData}){
        const { data, isSuccess, isLoading } = useQuery(['myQuery', myParams], async () => {
            return myAjaxCall(myParams);
        }, {
            cacheTime: 0,
            initialData
        });
    
        return (
               
        )
    }

    回复
    0
  • 取消回复