๐ ๋ค์ด๊ฐ๋ฉฐ
๋ฆฌ์กํธ๋ก ํ์ฝ ํ์์ ํด๋ก ์ฝ๋ฉํ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ ์ํ๋ฉด์ ๊ณต๋ถ ์ค์, Link (react-router-dom)์ ํด๋ฆญํ๋ฉด url์ ๋ณ๊ฒฝ์ด ๋์ง๋ง ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์์ ์ ๋๋ก ๊ธฐ๋ฅ์ด ์๋ํ์ง ์๋ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค.
ํด๊ฒฐํ๊ณ ๋๋๊น ์ ๋ง ๋ณ ๊ฒ ์๋์์ง๋ง...(๊ฐ๋
๋ถ์กฑ) ๋ฌด์์ด ๋ฌธ์ ์ด๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๋ค์ ๋ณต์ตํ๊ธฐ ์ํด ์ ๋ฆฌํด๋ณธ๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ ํ๋ฉด์ด๋ค.
Detail ์ปดํฌ๋ํธ์์ ํด๋น ์ํ์ ๊ด๋ จ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ๋ค.
Detail ์ปดํฌ๋ํธ์์ ๊ด๋ จ ์ํ๋ฅผ ๋ณด์ฌ์ค ๋ค, ๊ด๋ จ ์ํ๋ฅผ ํด๋ฆญํ๋ฉด ๊ทธ ๊ด๋ จ ์ํ์ Detail ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๊ฒ ๊ตฌํํ๊ณ ์ถ์๋ค.
ํ์ง๋ง ์ฌ์ง์ ๋ณด์ด๋ ๋ฐ์ ๊ฐ์ด ํด๋ฆญ์ ํ๋ฉด url์ ์ ๋ณ๊ฒฝ์ด ๋์ง๋ง ํด๋น ์ํ์ Detail์ด ๋ ๋๋ง์ด ๋์ง ์์์ต๋๋ค.
๊ด๋ จ๋ ์ปดํฌ๋ํธ๋ค์ ์ฝ๋๋ค์ด๋ค.
conosole.log๋ก ํ๋ํ๋ ๋ค ์ถ๋ ฅํด๋ณธ ๊ฒฐ๊ณผ ์๋ก์ด api๊ฐ ๋ฐ์์ง์ง ์์ ์ฑ๋ก ๋ ๋๋ง์ด ๋๊ธฐ ๋๋ฌธ์, url์ ๋ณ๊ฒฝ์ด ๋์ง๋ง ์ปดํฌ๋ํธ๋ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋ ๋๋ง์ ํ์ง ๋ชปํ๋ค.
โโ ํด๊ฒฐ์ฑ ์ ์ป๊ธฐ๊น์ง...
์ด๊ฑฐ ํด๊ฒฐํ๋ ค๊ณ ๊ตฌ๊ธ๋ง ํ ํ์ ๋ค์ด๋ค.. ์ฌ์ง์ ์ธ์ ์์ฒญ ๋ง์...
๊ตฌ๊ธ๋ง์ ํด์ ์ฌ๋ฌ ํด๊ฒฐ์ฑ ๋ค์ ์ ์ฉํด ๋ณด์์ง๋ง ์ํฉ์ ๋ฐ๋ผ์ ๋ชจ๋ ์ด์ ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ ๋ ๊ตฌ๊ธ๋ง ํด์ ๋์จ ํด๊ฒฐ์ฑ ์ผ๋ก๋ ํด๊ฒฐ์ด ์ ๋์๋ค.
ํผ์๋์ง๋ ์๋ ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๋ฉด์ state๋ฅผ ์ด์ฉํด์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ ๋ ๋๋ง ๋๊ฒ ํด ๋ณผ๊น..๋ผ๋ ๋ฑ๋ฑ ์๊ฐ์ ํด๋ณด๋ฉด์ ๋ชจ๋ ์๋ํด๋ณด์์ง๋ง ๋ฌดํ ๋ ๋๋ง์ด ๋๋ ๋ฑ ์ค๋ฅ๋ง ๋ ๋ฐ์ํ ๋ฟ์ด์๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ ๋ ธ๋ง๋์ฝ๋ ์ฌ๋์ react ์ฑ๋์๋ค๊ฐ ํด๋น ์ง๋ฌธ์ ์ฌ๋ ธ๋๋, ์ฌ๋์ ์ผ์๋ถ๊ป์ props๊ฐ ์ ๋ฐ์ดํธ๋์ ๋ ์ปดํฌ๋ํธ๋ ์๋ก ์ ๋ฐ์ดํธ๋๋๋ก ํด๋ณด๋ผ๋ ์กฐ์ธ์ ๋ฐ์๋ค.
์กฐ์ธ ๋๋ถ์ ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์ ์๋ ๋ฆฌ์กํธ Lifecycle์ ๋ณด๋ฉด์ ๋ค์ ๊ณต๋ถ๋ ํ๋ฉด์ ํด๊ฒฐ ๋ฐฉ์์ ์๊ฐํ๊ฒ ๋์๋ค.
๐ก ํด๊ฒฐ ๋ฐฉ์
๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ค๊ฐ ๋ฐ๋ก componentDidUpdate๋ผ๋Lifecycle์ด ๋์ ๋ค์ด์๋ค.
ko.reactjs.org/docs/react-component.html
์ฒ์์ ๋ฆฌ์กํธ๋ฅผ ์ ํ๋ฉด์ ๋ฐฐ์ด ๊ฐ๋ ์ด์ง๋ง ํ์คํ๊ฒ ์๊ณ ์์ง ๋ชปํด์ ์๊ฐ์ ๋ชปํ๋ ๊ฒ ๊ฐ๋ค.
componentDidUpdate๋ก ์ด์ props๋ฅผ ์ธ์๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์ฒ์ ์๊ฒ ๋์๋ค.
๊ทธ๋์ ์๊ฐํ ๊ฒ์ด url์ ์ ๋ณ๊ฒฝ์ด ๋๋๊น ํ์ฌ url๊ณผ ์ ์ url์ ๋น๊ตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ํจ์๋ฅผ ์๋์ํค๊ฒ ํ๋ฉด์ด๋จ๊น ๋ผ๋ ์๊ฐ์ ๋ฐ๋ก ํ๋ฒ ์ ์ฉํด ๋ณด์๋ค.
componentDidMount์ ์๋ api๋ฅผ ๋ฐ์์ค๋ ํจ์๋ฅผ componentDidUpdate์์๋ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฐ๋ก ๋ถ๋ฆฌํด์คฌ๋ค.
๊ทธ๋ฆฌ๊ณ componentDidUpdate์์ ์ด์ ์ props๋ฅผ ๋ฐ์์์ ์ , ํ pathname์ ๋น๊ตํด์ ํ์ฌ์ ๋ค๋ฅด๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ฐ์ ์ ์๊ฒ getData ํจ์๋ฅผ ์คํ์ํค๋๋ก ํ๋ค.
componentDidUpdate๋ฅผ ํตํด์ prevProps์ ํ์ฌ props๋ฅผ console.log๋ฅผ ํตํด ์ถ๋ ฅํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
console.log(`์ด์ pathname ${prevProps.location.pathname}`);
console.log(`ํ์ฌ pathname ${this.props.location.pathname}`);
์ด๋ก์ if๋ฌธ์ ํตํด์ ๋น๊ตํ ํ ํจ์๋ฅผ ์คํ์์ผ์ฃผ๋๋ก ํ๋ค.
ํด๊ฒฐ๋ ์ฝ๋๋ค.
๐ ๊ฒฐ๊ณผ ํ๋ฉด
์๊ฐํ๋ ๊ฒ์ฒ๋ผ ์๋์ด ์์ฃผ ์ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๐ ๋ง์น๋ฉฐ
์ ์ด์ ๋ฆฌ์กํธ์ Lifecycle์ ๋ํ ๊ฐ๋ ์ด ํ์คํ๊ฒ ์กํ์์๋ค๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ์ํฉ์ด์๋๋ฐ ๊ฐ๋ ์ด ๋ถ์กฑํ ํ์ ๋ง์ด ๋์์จ ๊ฒ ๊ฐ๋ค.
ํ์ฌ ์ด ๋ฐฉ๋ฒ์ด ํด๊ฒฐํ๋ ๋ฐ์ ์์ด์ ์ต์ ์ผ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋, ์ ์๊ฒ๋ ์ต์ ์ธ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ๊ธฐํ์ ํ์คํ ์๊ฒ ๋์๊ณ , ๊ทธ๋์ ๋ค์์ Lifecycle์ ๋ํด ์ ๋ฆฌํ๋ ๊ณต๋ถํ๊ณ ์์ฑํ ์๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ด์ function ์ปดํฌ๋ํธ๋ก hook์ ์ฌ์ฉํ์ผ๋ฉด ์ฝ๊ฒ ๋์ ๊ฑฐ๋ผ๋ ๋ง์๋ ์์๋๋ฐ...
์์ง ์ต์ํ์ง ์๊ณ ํ์ฌ ์์ฑ๋์ง๋ ์์์ง๋ง class ์ปดํฌ๋ํธ๋ก ์์ฑ๋ ๊ฒ๋ค ๋ชจ๋ funciton ์ปดํฌ๋ํธ๋ก ๋ณ๊ฒฝ ์ค์ด์ด์
ํ์ฌ ์ด ๊ธ์์ ์์ฑํ ์ปดํฌ๋ํธ๋ hook์ ์ฌ์ฉํด์ ๋ฐ๊ฟ๋ณผ ์๊ฐ์ด๋ค.