我在我的NextJS应用程序/team/[id]
中有一个动态路由....当页面加载时,它会转到API并检查团队的ID,然后返回信息,如果ID在API上不存在,则返回404。如果从API返回的数据也是404,有没有办法显示404?..目前,我有一个页面加载器,它在加载时运行,但当ID不存在时,页面加载器就继续运行,不会停止。
这是我目前的工作很好的ID的存在,但打破如果一个ID不存在;
import useSWR from "swr"
import axios from '@/lib/axios'
import { useRouter } from 'next/router'
const ViewTeam = () => {
const router = useRouter()
const { id } = router.query
const { data: team, error, mutate } = useSWR('/api/team/' + id, () =>
axios.get('/api/team/' + id)
.then(response => response.data.data)
)
if (! team) {
return (<PageLoader />)
}
return (
//
)
}
字符串
3条答案
按热度按时间jbose2ul1#
通常你应该有类似
isLoading
或loading
状态的东西,它将显示你的<PageLoader />
组件。在useSWR
文档中,我看到它是isLoading
。所以你只要做:字符串
之后,根据您的请求响应,您可以定义当它获得数据(正确或错误)时应该发生什么。如果它是错的,它应该是例如:
型
正确的时候你就显示休息:
型
所以最后它应该看起来像这样:
型
mjqavswn2#
如果你不想你的网址被改变时,
team
没有找到,但要显示相同的404页面,那么你可以这样做。1.创建组件,即ErrorComponent.jsx
字符串
1.在页面目录中创建一个页面,命名为404.jsx
型
1.将代码修改为
型
ivqmmu1c3#
理想情况下,您应该在useEffect内部获取数据。通过使用useEffect和适当的依赖项管理,可以确保在适当的时间获取数据和进行任何相关的清理,从而使React应用程序更具可预测性和效率。
字符串
使用[ ]确保你只会在挂载时获取一次。
在return()中,如果没有显示加载页面,则应检查获取是否完成
型