admin管理员组文章数量:1334129
I want to fetch data from an API, and if it fails I want it to render the _error.js
page. My request depends on the router query. So if the user enters a wrong query the page is going to throw an error.
If the request fails by throwing, I want my custom _error.js
to be displayed.
How do I achieve this?
Here is my index page:
// pages/index.js
import React from 'react'
import PropTypes from 'prop-types'
import fetch from 'isomorphic-unfetch'
import Items from '../ponents/Items'
import { API } from '../utils/config'
const IndexPage = ({ items }) => {
return (
<div>
<Items items={items} />
</div>
)
}
IndexPage.getInitialProps = async (context) => {
const { query } = context
const filter = query.filter || ''
const name = query.name || ''
const page = query.page || 1
const response = await fetch(
`${API}?${filter}=${name}&page=${page}`,
)
const data = await response.json()
return {
items: data.items,
}
}
export default IndexPage
my _app file:
// pages/_app.js
import React from 'react'
import Router from 'next/router'
import Page from '../ponents/Page'
const MyApp = (props) => {
const { Component, pageProps } = props
return (
<Page>
<Component
items={pageProps.items}
query={pageProps.query}
statusCode={pageProps.statusCode}
/>
</Page>
)
}
export default MyApp
I want to fetch data from an API, and if it fails I want it to render the _error.js
page. My request depends on the router query. So if the user enters a wrong query the page is going to throw an error.
If the request fails by throwing, I want my custom _error.js
to be displayed.
How do I achieve this?
Here is my index page:
// pages/index.js
import React from 'react'
import PropTypes from 'prop-types'
import fetch from 'isomorphic-unfetch'
import Items from '../ponents/Items'
import { API } from '../utils/config'
const IndexPage = ({ items }) => {
return (
<div>
<Items items={items} />
</div>
)
}
IndexPage.getInitialProps = async (context) => {
const { query } = context
const filter = query.filter || ''
const name = query.name || ''
const page = query.page || 1
const response = await fetch(
`${API}?${filter}=${name}&page=${page}`,
)
const data = await response.json()
return {
items: data.items,
}
}
export default IndexPage
my _app file:
// pages/_app.js
import React from 'react'
import Router from 'next/router'
import Page from '../ponents/Page'
const MyApp = (props) => {
const { Component, pageProps } = props
return (
<Page>
<Component
items={pageProps.items}
query={pageProps.query}
statusCode={pageProps.statusCode}
/>
</Page>
)
}
export default MyApp
Share
Improve this question
asked Mar 10, 2020 at 19:19
0xsh0xsh
1,5953 gold badges12 silver badges20 bronze badges
1 Answer
Reset to default 3Try Conditional rendering based on the error, so if in an error occurs set the items
to null
const IndexPage = ({ items }) => {
return (
{items===null ? <Fragment>
<ErrorPage />
</Fragment> : <div>
<Items items={items} />
</div> }
)
}
and in the getInitialProps
IndexPage.getInitialProps = async (context) => {
try{
const { query } = context
const filter = query.filter || ''
const name = query.name || ''
const page = query.page || 1
const response = await fetch(
`${API}?${filter}=${name}&page=${page}`,
)
const data = await response.json()
return {
items: data.items,
}
}catch(error){
return {
items: null
}
}
}
本文标签: javascriptNextJS How to handle error in getInitialPropsStack Overflow
版权声明:本文标题:javascript - Next.JS: How to handle error in getInitialProps? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742357778a2459760.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论