๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Frontend/Next.js

[ Next.js ] next/router ์‚ฌ์šฉ์‹œ ๋ฌดํ•œ ๋ Œ๋”๋ง ์ด์Šˆ ํ•ด๊ฒฐํ•˜๊ธฐ

by YWTechIT 2022. 10. 25.
728x90

๐Ÿ“ next/router ์‚ฌ์šฉ ์‹œ ๋ฌดํ•œ ๋ Œ๋”๋ง ์ด์Šˆ ํ•ด๊ฒฐํ•˜๊ธฐ

Next.js๋กœ ํŠน์ • ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ๋ฌดํ•œ ์ƒˆ๋กœ๊ณ ์นจ ๋˜๋Š” ์ด์Šˆ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ์ด์Šˆ๋ฅผ ํŠธ๋ž˜ํ‚นํ•ด๋ณด๋‹ˆ ์›์ธ์€ next/router - Router.replace ๋•Œ๋ฌธ์ด์—ˆ๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ Router.replace๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ํ•„ํ„ฐ์— ์กฐ๊ฑด์„ ๋„ฃ๊ณ  ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ํ•„ํ„ฐ ๊ฐ’์„ ์ฟผ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋งํฌ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ํ•„ํ„ฐ๋ฅผ ๋‘ ๋ฒˆ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ Router.replace์™€ state๋ฅผ ์žƒ์ง€ ์•Š๊ณ  pathname๊ณผ query ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ธ shallow Routing: true๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋‚˜ ๋ฌดํ•œ ๋ Œ๋”๋ง(์ƒˆ๋กœ๊ณ ์นจ) ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

728x90

์™œ ์ด๋Ÿฐ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๊ตฌ๊ธ€๋ง ํ•ด๋ณธ ๊ฒฐ๊ณผ ๊ฒฐ๋ก ์ ์œผ๋กœ 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

  1. Shallow Routing
  2. Ability to push changes to url without re-rendering #18072
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€