gpt4 book ai didi

reactjs - 无法从 useSWR 错误属性获取响应错误

转载 作者:行者123 更新时间:2023-12-02 18:07:34 25 4
gpt4 key购买 nike

我正在使用 Next.js,并在将其集成到我的应用程序之前尝试对 SWR 进行一些测试。因此,下面只是一个 faker.api 测试,看看它的运行情况并熟悉它。

一切都工作得很好,但由于某种原因,我似乎无法恢复错误,我的控制台日志没有在控制台中打印任何内容。

import type { NextPage } from 'next'
import { useState } from 'react'
import useSWR, { SWRConfig } from 'swr'
import UseBooks from '../Hooks/UseBooks'

type HomeProps = NextPage & {
serverData: any
}

const fetcher = (url:string) => fetch(url).then(r => r.json())

const Home = ({serverData}: HomeProps) => {
const [shouldFetch, setShouldFetch] = useState(false)
const {data, error} = useSWR(
`https://fakerapi.it/api/v1/ompanies?_quantity=10`,
fetcher,
{
fallbackData: serverData,
onError: (error, key)=> {
console.log(error)
}
})

const [booksData, booksError] = UseBooks(shouldFetch, 'https://fakerapi.it/api/v1/books?_quantity=10')
const handleClick = () => {
setShouldFetch(true)
}

return (
<div>
{JSON.stringify(booksData)}
<ul>
{data?.data?.map(el => (
<li key={el.id}>{el.name}</li>
))}
</ul>
<button onClick={handleClick}>next</button>
</div>
)
}

export async function getServerSideProps(){
const res = await fetch(`https://fakerapi.it/api/v1/companies?_quantity=10`)
const serverData= await res.json()
return{ props:{serverData}}
}

export default Home

最佳答案

这是预期的行为,因为 fetch当请求返回非 2xx 响应时,它实际上不会拒绝,只有在发生网络错误时才会拒绝。如果您将 data 记录到控制台,您会注意到它包含错误响应正文:{ status: "Not find", code: 404, Total: 0 } .

您可以使用 fetch 响应的 ok 属性来确定请求是否返回 2xx 响应,如果没有返回,则自行抛出错误。

const fetcher = (url: string) => fetch(url).then(r => {
if (!r.ok) {
throw new Error('Something went wrong with the request')
}
return r.json()
})

或者,您可以使用 axios - 因为当返回非 2xx 响应时它会抛出错误。

const fetcher = (url: string) => axios(url).then((r) => r.data);

关于reactjs - 无法从 useSWR 错误属性获取响应错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72927576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com