์ง๊ธ๊น์ง๋ react-router-dom
์ ์ฌ์ฉํ๋ฉด์ ๊ทธ์ ํ์ด์ง๋ฅผ ์ง์ ํด์ฃผ๊ณ
๊ทธ ํ์ด์ง๋ก ์ด๋ํ๋ ์์
๋ง์ ํ์๋๋ฐ,
history
์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๊ฑฐ๋, ๋ฎ์ด์์ฐ๋ ์์
๋ ํ ์ ์๋๊ฑธ ์๊ฒ ๋์๋ค.
๊ทธ ์ค์์ history
์ ๋ฉ์๋์ธ push
์ replace
๋ฅผ ์์๋ณด์ ๐
(๊ฐ๋จํ๊ฒ go
๋ ์ ๋ฆฌํด๋ณด์)
history
๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ํ์คํ ๋ฆฌ ์ธ์
์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ด๋ฉฐ
stack์ผ๋ก ์์ด๊ฒ ๋๋ค.
react-router-dom
์์์ history
๋ ๋ผ์ฐํธ๋ก ์ฌ์ฉ๋ ์ปดํฌ๋ํธ์๊ฒ
match
, location
๊ณผ ํจ๊ป ์ ๋ฌ๋๋ props
์ค ํ๋์ด๋ค.
๊ทธ ์ค์ go
, push
, replace
๋ฉ์๋์ ๋ํด ์ ๋ฆฌํด๋ณด์.
๋จ์ํ๊ฒ ์ด๋ ์์ ์ผ๋ก์ ์ด๋์ ํ ๋ ์ฌ์ฉํ๋ค.
history.go()
์์ ์ซ์๋ url์ ๋ฃ์ด์ ์ฌ์ฉํ๋ค.
go(1)
= goForward()
go(-1)
= goBack()
When using the router.push, it adds a new route to the top of the stack.
์์ฒ๋ผ, push
๋ stack์ history
์ ์ผ ์์ ์๋ ๊ฒ์ด๋ค.
history.push()
์์๋ ์ด๋ํ๊ณ ์ ํ๋ path
๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด
์ด์ history
์์ ์์ด๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด ๊ฒฝ๋ก ์ด๋์
Home โก๏ธ Profile โก๏ธ Login
์์๋ก ์ด๋ํ๋ค๊ณ ํ์ ๋, history.push("/Profile")
์ ๋ ๋ฆฌ๋ฉด
Home โก๏ธ Profile โก๏ธ Login โก๏ธ Profile
์์๋ก ์์ด๊ฒ ๋๋ค.
When you use the router.replace, you're overwritting the top of the the stack.
replace
๋ history
์ ์ผ ์์ ์๋ ์์๋ฅผ ๋ฎ์ด์์ฐ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ๊ฒฝ๋ก ์ด๋์
Home โก๏ธ Profile โก๏ธ Login
์์๋ก ์ด๋ํ๋ค๊ณ ํ์ ๋, history.replace("/Profile")
์ ๋ ๋ฆฌ๋ฉด
๋งจ ์์ ์๋ Login
์ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ , ์๋ก ๋ ๋ผ์จ Profile
๋ก ๋ฎ์ด์์ด๋ค.
Home โก๏ธ Profile โก๏ธ Profile
์์๋ก ๋ฐ๋๊ฒ ๋๋ค.
router์์๋ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํด์ push
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋๋ถ๋ถ replace
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ ํด์ ธ์๋ค.
replace
๋ ์ด์ ์ ์์ธ ํ์คํ ๋ฆฌ๋ฅผ ๋ฎ์ด์์ฐ๊ธฐ ๋๋ฌธ์
ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ธฐ์ง ์๊ธฐ ์ํ ์์
์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
(์๋ฅผ ๋ค๋ฉด, ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ ๊ทผํ๋ ค ํ๋ ๊ฒฝ์ฐ๋, login ํ ์ ์ ๊ฐ ๋ค์ login ์ฐฝ์ผ๋ก ์ ๊ทผํ๋ ค ํ ๋ ๋ฑ๋ฑ)
๋ค์ํฌ์คํ
์์๋ typescript์์ history
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฐ์ด๋ hook์ธ useHistory
์ ๋ํด์๋ ์ ๋ฆฌํด๋ณผ ์์ !
์ฐธ๊ณ ํ์์ต๋๋ค :)