-
ํ๋ก์ ํธ TIL (2) - [ window.location.replace() ]ํ๋ก์ ํธ ๋ฆฌ๋ทฐ/Book-Square 2020. 9. 14. 22:38
์ค๋ ํ ์ผ ๐คช
์ค๋์ ๋ฆฌ์กํธ๋ก MyLibrary ํ์ด์ง๋ฅผ ๊ตฌํํ๋ฉด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ ๋ฐ๋ผ ํ๋ฉด์ ์๋ก๊ณ ์นจ์ด ํ์ํ ๋ถ๋ถ์ ๋ํ์ฌ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๊น ๊ณ ๋ฏผ์ ํ๋ค๊ฐ window.location.replace() ๋ผ๋ ๋ฉ์๋๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด์์ต๋๋ค..
๋จผ์ ์ ๊ฐ ๊ตฌํํ๊ณ ์ ํ๋ ๊ฒ์ ๋ด ์์ฌ์ ์๋ ์ฑ ์ ์ญ์ ํ์ ๋ ์ญ์ ํ ์ฑ ์ ๋บ ๋๋จธ์ง ์ฑ ์ ๋ค์ UI๋ก MyLibrary ํ์ด์ง์ ๋ฐ๋ก๋ฐ๋ก ๋ณด์ฌ์ฃผ๊ณ ์ถ์์ต๋๋ค. ์ ๋ ์ด ๊ณผ์ ์ ์์ฑํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋์์ต๋๋ค.
- useEffect๋ฅผ ์ฌ์ฉํ์ฌ ํน์ Props๊ฐ ๋ฐ๋ ๋, ๋ฆฌ๋ ๋๋ง ์ํค๊ธฐ
- history.push()๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ์ด๋์ํค๊ธฐ
- window.location.replace("/MyLibrary") ๋ฅผ ํตํด ์๋ก๊ณ ์นจ ํจ๊ณผ ๋ด๊ธฐ
๋จผ์ 3๋ฒ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฒ์ history.push()๋ฅผ ๊ตฌ๊ธ๋งํ ๋ ์ค๋ฉฐ๊ฐ๋ฉฐ ๋ดค๋ ๋ฉ์๋์๋๋ฐ ๊ทธ ๋๋ ํ์ํ์ง ์์์ ๊ทธ๋ฅ ์ง๋์ณค์์ต๋๋ค.
์ด๋ป๊ฒํ๋ฉด ์๋ก๊ณ ์นจํ๋ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์๊น ํ๊ณ ๊ณ ๋ฏผํ๋ ์ค ๋ฌธ๋ ๊ตฌ๊ธ๋งํ๋ฉฐ ๋ดค์๋ ์ด ๋ฉ์๋๊ฐ ๋ ์ฌ๋ผ์ ์ฝ๋์ ์ ์ฉ์ํค๋ ๋ด๊ฐ ์ํ๋๋๋ก ์๋์ ํ์ง๋ง ์ด๊ฒ ์ด๋ค ๋ฉ์๋์ธ์ง ์์๋ณผ ํ์๊ฐ ์์์ต๋๋ค.
window.location.replace()
๋จผ์ ์ด ๋ฉ์๋๋ฅผ ๊ฐ๋ตํ๊ฒ ํ๋ก ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
window.location.replace() ๊ธฐ๋ฅ ๊ธฐ์กดํ์ด์ง๋ฅผ ์๋ก์ด ํ์ด์ง๋ก ๋ณ๊ฒฝ ํํ ๋ฉ์๋ ์ฃผ์ ํ์คํ ๋ฆฌ ๊ธฐ๋ก๋์ง ์์ ์ฌ์ฉ ์ location.replace("./MyLibrary"); ์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋์ง๊น์ง์ ์ด์ ๋ฅผ ๋ค์๋ฉด
- ๊ธฐ์กด ํ์ด์ง๋ฅผ "์๋ก์ด ํ์ด์ง" ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋์ง๋ง "์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ด์ ๊ณผ ๋ค๋ฅธ ์๋ก์ด ํ์ด์ง" ๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์์ ๋ค๋ฅธ ๋ฌธ์ ๋ ์๋๋ผ๊ณ ์๊ฐํ๊ธฐ์ ์ ์ฉ
- ์๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ํ์ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฌ ์ด์ ํ์ด์ง๋ก ๊ฐ ํ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ ํ์คํ ๋ฆฌ๊ฐ ๊ธฐ๋ก๋์ง ์๋๋ค๋ ์
- history๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด import๋ก ๋ถ๋ฌ์ค๊ณ withRouter๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ํํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ด์ ๊ฐํธํ๋ค!
์ ์ ํ ์ด์ ์ผ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฑ ์ญ์ ๋ฅผ ๋๋ฅธ ํ state๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ๋ ์์ ๋ฟ๋๋ฌ ํ์ด์ง ๋ฆฌ๋ ๋๋ง์ ์ํด ์๋ก์ด state๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ถํ์ํ๋ค๊ณ ์๊ฐํ๊ณ ์ง๊ธ ๋ด๊ฐ ์์ฑํ ์ฝ๋์์๋ ์ด ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๋ง์ฝ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํด๋ณธ๋ค๋ฉด ?
์ง๊ธ ์ ํ๋ก์ ํธ์์ ์ด ๋ฐฉ๋ฒ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ์ฉํด๋ณธ๋ค๊ณ ํ๋ฉด useEffect๋ฅผ ํตํด ๋ ๋๋ง ๋๊ธฐ ์ dispatch๋ฅผ ํตํด ์๋ฒ์์ ๋ด ๋์ ๋ชฉ๋ก์ ๋ฐ์์ค๋ ์์ ์ ํ ํ, ๋ฆฌ๋์ค ์คํ ์ด์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ฑ ์ ์ญ์ ํ๋ฉด ๋ฆฌ๋์ค ์คํ ์ด์ ์ญ์ ๋ ์ฑ ์ ๋บ ๋๋จธ์ง ๋ชฉ๋ก๋ค์ ์ ๋ฐ์ดํธ ์์ผ์ค์ผ๋ก์จ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ๋ฐ์์ํฌ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ํด๋น state๋ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๊ด๋ฆฌ๋ฅผ ํด์ผ ํ ํ์๊ฐ ์์ ๋ฟ๋๋ฌ ๋จ์ง ๋ด๊ฐ ์ง๊ธ ๊ฒช๊ณ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ฆฌ๋์ค ๋ชจ๋์ ํ๋ ๋ ์์ฑํ๋ค๋ ๊ฒ์ ํจ์จ์ ์ด์ง ๋ชปํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ด๊ฐ ์๊ฐํ๊ธฐ์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ๋๋ ?
๋ก๊ทธ์ธํ์ด์ง์์ ๋ก๊ทธ์ธ ํ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ๋ค์ ๋์ค์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋ค๋ฉด window.location.replace() ๋ฉ์๋๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ค์ ๋ก ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๊ตฌํํ๋ฉด์ browser history๋ฅผ ์กฐ์ํ๋๋ฐ ๋ก๊ทธ์ธ์ ํ ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋ค์ ๋ณด๋ ๊ฒ์ ์ ์ ํ์ง ์๋ค๊ณ ์๊ฐํด์ ์ฌ๋ฌ ์ฌ์ดํธ๋ค์ ์ฐธ๊ณ ํ ๊ฒฐ๊ณผ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ ์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ๋์ค๋ ์ฌ์ดํธ๊ฐ ๋ง์ ๊ฒ์ ๋ณด๊ณ UI์ ์ผ๋ก ์ด์ํ ๊ฒ์ ์๋ ๊ฒ ๊ฐ๋ค๋ผ๋ ํ๋จ์ ๋ด๋ ค ์ผ๋จ ์ ํ๋ก์ ํธ์์๋ history.push() ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์์ ๊ฐ์ ๊ฒฝ์ฐ์ฒ๋ผ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํตํด ์ด์ ์ ๋ฐฉ๋ฌธํ๋ ํ์ด์ง๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๊ฒ ํ๊ณ ์ถ๋ค๋ฉด window.location.replace() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์น๋ฉฐ
๋ถ๋ช ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ์์ต๋๋ค............ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์ง ์ฐ์ฐํจ์ด ๋จ์์๊ธฐ ๋๋ฌธ์...
์ฑ ์ ์ญ์ ํ ๋๋ง๋ค ๋ฆฌ๋ ๋๋ง์ ํ ๊ฒ์ด๊ณ ๋ฆฌ๋ ๋๋ง์ด ๋๋ฉด useEffect๋ฅผ ํตํด ๊ณ์ํด์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋๋ฐ ์ด ์์ ์ด ๊ณผ์ฐ ๋ง๋ ๊ฒ์ผ๊น ํ๋ ์๊ฐ์ด ๋ญ๋๋ค.
๊ทธ๋๋ ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด history.push(), window.location.replace() ๋ฑ๋ฑ ํ์ด์ง ์ด๋์ ๋ํ ์ง์์ ๊ณต๋ถํ ์ ์๊ฒ ๋์ด ์ข์๋ ์ฝ์ง? ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค!!
์ฐธ๊ณ ํ๋ ๋ ํผ๋ฐ์ค
https://stackoverflow.com/questions/40210673/whats-the-different-between-browserhistory-push-and-location-replace
https://stackoverflow.com/questions/47583856/window-location-href-vs-history-pushstate-which-to-use/47583989( ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ๊ตฌ๊ธ๋ง์ ๊ณ์ ํ ํ ๋ ์ค๋ฉฐ๊ฐ๋ฉฐ ๋ณด์ด๋ ํ์ด์ง ์ด๋ ๊ด๋ จ ์ด์๋ฅผ ๋ ๋์ฌ๊ฒจ ๋ณด๊ณ ๋ถ๋งํฌํ์ฌ ๋ชจ์๋์์ผ ๊ฒ ๋ค.....๐)
'ํ๋ก์ ํธ ๋ฆฌ๋ทฐ > Book-Square' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ