일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- getUTCDate
- hook
- Programmers
- CSS
- React 고급안내서
- react
- codingtest
- React 공식문서
- React 18 Nextjs
- 고급안내서
- React 18
- context
- Nextjs
- notFound()
- Next13
- react hook
- Render Props
- Nextjs React 18
- Babel
- background setInterval
- background: url
- next13 head
- React 고급 안내서
- RTK Query
- background tab
- Javascript
- React API 참고서
- react-helmet
- background setttimeout
- React18
Archives
- Today
- Total
akjfal
Next13 notFound()에 대해 알아보자 본문
next.js github discussion에 질문을 올린 내용입니다.
https://github.com/vercel/next.js/discussions/49433
notFound()를 사용하면서 이슈를 해결하기 위해 테스트하다보니 여러 케이스를 발견하게 되었습니다. 상세한 로직은 해당 github를 참조하시기 바랍니다. https://github.com/osydoo/next13-not-found
Summary
- ‘use client’의 useEffect의 동작이 의존성에 따라서 다르게 동작하는 이유가 뭔가요?
- axios.interceptors를 동기적으로 실행했을 때는 notFound()가 에러를 뱉고, 비동기로 했을때는 동작이 무시되는 이유가 뭔가요?
- 클릭이벤트에선 왜 에러를 뱉나요?
Case
In 'use client'
1. useEffect - Error case
useEffect(()=> {
(async () => {
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
notFound()
}
})()
}, [])
2. useEffect - useEffect의 의존성이 [] 일땐 동작안하고 여긴 동작하는 이유가 뭔가요?
const [data, setData] = useState('init');
useEffect(()=> {
(async () => {
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
setData('error')
}
})()
}, [])
useEffect(()=> {
if(data === 'error') {
notFound();
}
}, [data])
3. click event - Error case
const handleClick = async () => {
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
notFound();
}
}
4. axios.interceptor - 왜 동기적으로한건 무시가 안되고 비동긴 무시가되나요?
const axios = _axios.create();
axios.interceptors.response.use(
function(res){
return res
},
function(err){
if(err){
console.log('interceptors')
notFound(); // not working
}
}
)
...
async () => {
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
notFound()
}
}
5. sync fetch
const axios = _axios.create();
axios.interceptors.response.use(
function(res){
return res
},
function(err){
if(err){
console.log('interceptors')
notFound();
}
}
)
...
try{
axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error');
notFound();
}
6. component rendering working case
const [data, setData] = useState('init');
if(data === 'error') {
notFound();
}
useEffect(()=> {
(async () => {
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
setData('error')
}
})()
}, [])
SSR
1. docs example case
try{
await axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error')
notFound()
}
2. ignored axios interceptors also SSR -> view Rendering Page not 404
const axios = _axios.create();
axios.interceptors.response.use(
function(res){
return res
},
function(err){
if(err){
console.log('interceptors')
notFound(); // not working
}
}
)
...
const AxiosInterceptors = () => {
try{
axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error');
}
return (
<div>
Rendering Page
</div>
)
}
3. syncAxiosInterceptors - ‘use client’와 동일하게 에러가 납니다.
axios.interceptors.response.use(
function(res){
return res
},
function(err){
if(err){
console.log('interceptors')
notFound();
}
}
)
...
try{
axios.get('<http://127.0.0.1:3001/error>'); // 404 error
console.log('success');
}catch(e){
console.log('error');
}
💡 React Query의 onSuccess, onError에서 사용을 해보려다가 정상적으로 동작하지 않는 것을 보고, fetch로까지 테스트해보면서 발견한 케이스들입니다.
답이 달리지 않는다면… notFound()를 까봐야할 것 같습니다.
'하루의 이슈' 카테고리의 다른 글
background: url을 유의해서 사용하자 (0) | 2023.05.09 |
---|---|
background에서 setinterval이나 settimeout 돌리기 (0) | 2023.05.09 |
getUTCDate와 getDate를 유의해서 사용하자 (0) | 2023.04.22 |
1/7 (0) | 2020.01.07 |
12/24 - 이브날에 터진 axios -Failed to load resource: the server responded with a status of 429 () (0) | 2019.12.24 |
Comments