处理页面 NextJS 文件中的异步数据
Handling aysnc data in a page NetxJS file
我有一个网页可以从 SpaceX graphQL API 中提取发射数据,然后将该数据呈现为列表。用户可以单击该列表中的特定发布,将他们带到有关该特定发布的 'details' 页面。
在详细信息页面上,我尝试使用 useRouter
从 URL 中提取参数。将此参数值注销到浏览器后,我发现它最初记录为 undefined
,然后在记录正确数据后不久 - 我假设这是某种异步问题。
我需要另一个 API 调用的参数,但是如果它没有立即加载,我就不能这样做 - 我已经尝试将它放入 async/await
函数中,但它没有帮助。建议?
详情页:[参数].js
import { useRouter } from 'next/router'
import { useContext,useState,useEffect } from 'react'
import { LaunchContext } from '../spacexContext'
const Items = () => {
const data = useContext(LaunchContext)
const router = useRouter()
console.log(router.query.paramter)
const getLaunchData = async () => {
const [ launchData,setLaunchData ] = useState([])
let parameters = await router.query.parameter
setLaunchData(parameters)
return launchData
}
const parameter = getLaunchData()
return (
<div>
this is items
</div>
);
}
export default Items;
当我重定向到 /launchesPast
路由
时,在浏览器中包含了控制台的屏幕截图
这是由 Automatic Static Optimization 的工作方式引起的:
Pages that are statically optimized by Automatic Static Optimization
will be hydrated without their route parameters provided, i.e query
will be an empty object ({}).
After hydration, Next.js will trigger an update to your application to
provide the route parameters in the query object.
参数未定义时可以returnnull,也可以尝试本期分享的一些解决方案:https://github.com/vercel/next.js/discussions/11484
我有一个网页可以从 SpaceX graphQL API 中提取发射数据,然后将该数据呈现为列表。用户可以单击该列表中的特定发布,将他们带到有关该特定发布的 'details' 页面。
在详细信息页面上,我尝试使用 useRouter
从 URL 中提取参数。将此参数值注销到浏览器后,我发现它最初记录为 undefined
,然后在记录正确数据后不久 - 我假设这是某种异步问题。
我需要另一个 API 调用的参数,但是如果它没有立即加载,我就不能这样做 - 我已经尝试将它放入 async/await
函数中,但它没有帮助。建议?
详情页:[参数].js
import { useRouter } from 'next/router'
import { useContext,useState,useEffect } from 'react'
import { LaunchContext } from '../spacexContext'
const Items = () => {
const data = useContext(LaunchContext)
const router = useRouter()
console.log(router.query.paramter)
const getLaunchData = async () => {
const [ launchData,setLaunchData ] = useState([])
let parameters = await router.query.parameter
setLaunchData(parameters)
return launchData
}
const parameter = getLaunchData()
return (
<div>
this is items
</div>
);
}
export default Items;
当我重定向到 /launchesPast
路由
这是由 Automatic Static Optimization 的工作方式引起的:
Pages that are statically optimized by Automatic Static Optimization will be hydrated without their route parameters provided, i.e query will be an empty object ({}).
After hydration, Next.js will trigger an update to your application to provide the route parameters in the query object.
参数未定义时可以returnnull,也可以尝试本期分享的一些解决方案:https://github.com/vercel/next.js/discussions/11484