๐ next/router ์ฌ์ฉ ์ ๋ฌดํ ๋ ๋๋ง ์ด์ ํด๊ฒฐํ๊ธฐ
Next.js
๋ก ํน์ ํ์ด์ง์ ์ ์ํ๋ฉด ๋ฌดํ ์๋ก๊ณ ์นจ ๋๋ ์ด์๋ฅผ ๋ฐ๊ฒฌํ๋ค. ์ด์๋ฅผ ํธ๋ํนํด๋ณด๋ ์์ธ์ next/router - Router.replace
๋๋ฌธ์ด์๋๋ฐ, ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ Router.replace
๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ํํฐ์ ์กฐ๊ฑด์ ๋ฃ๊ณ ๊ฒ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํด๋น ํํฐ ๊ฐ์ ์ฟผ๋ฆฌ์ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋งํฌ๋ฅผ ๊ณต์ ํ ๋ ํํฐ๋ฅผ ๋ ๋ฒ ์กฐ์ํ์ง ์๋๋ก ํ๊ธฐ ์ํจ์ด์๋ค. ๊ทธ๋์ Router.replace
์ state
๋ฅผ ์์ง ์๊ณ pathname
๊ณผ query
๊ฐ์ ์
๋ฐ์ดํธ ํ ์ ์๋ ์ต์
์ธ shallow Routing: true
๋ฅผ ์ถ๊ฐํ์ผ๋ ๋ฌดํ ๋ ๋๋ง(์๋ก๊ณ ์นจ) ๋๋ ์ด์๊ฐ ์๊ฒผ๋ค.
์ ์ด๋ฐ ํ์์ด ๋ฐ์ํ๋์ง ์์๋ณด๊ธฐ ์ํด ๊ตฌ๊ธ๋ง ํด๋ณธ ๊ฒฐ๊ณผ ๊ฒฐ๋ก ์ ์ผ๋ก next/router
๋ฅผ ์ฌ์ฉํ ๋ ๋ฆฌ์กํธ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ContextAPI
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ , router.*
๋ฅผ ์คํํ๋ฉด ๋ด๋ถ ์ํ ๊ฐ์ ๋ฐ๊พธ๊ธฐ ์ํด ํ์ฐ์ ์ผ๋ก ๋ฆฌ์กํธ์ ๋ฆฌ๋ ๋๋ง์ ๋ฐ์์ํค๋ฏ๋ก ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด next/router
๋์ ๋ฆฌ์กํธ์ state
๋ฅผ ๊ฑด๋ค์ง ์๊ณ ๋ธ๋ผ์ฐ์ history
๋ฅผ ์ฌ์ฉํ๋ window.history API
๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ์ข๋ค. ๊ทธ๋ฌ๋ฉด ๋ฆฌ์กํธ์ ์ํ๋ฅผ ๊ฑด๋ค์ง ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ค๋ ๊ธ์ ๋ดค๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก Router.replace
๋์ window.history.replaceState
๋ฅผ ์ฌ์ฉํด๋ณด๋ ๋ฌดํ ๋ ๋๋ง ์ด์๊ฐ ํด๊ฒฐ๋์๋ค. issue
๋ฅผ tracking
ํ๋๋ฐ ๊ฝค ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋๋ฐ, ์ดํ์ ๋์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๋ถ๋ค์๊ฒ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ ๋ง์์ ๊ธ์ ๋จ๊ธด๋ค.
const newPath = `/tour/tour-products?${stringify(query)}`;
// AS-IS
Router.replace(newPath, undefined, {
shallow: true,
})
// TO-BE
history.replaceState({}, '', newPath)
Reference
'Frontend > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Next.js ] TypeError: Cannot set properties of undefined (setting 'nodeToRestore) ํด๊ฒฐ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ (0) | 2023.04.05 |
---|---|
[ Next.js ] Rewrites์ Redirects ์์๋ณด๊ธฐ (0) | 2022.10.11 |
๋๊ธ