ํ”„๋กœ๊ทธ๋ž˜๋ฐ/React JS

[React] Link ํด๋ฆญ ์‹œ url์€ ๋ฐ”๋€Œ์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๋Š” ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ (์˜ค๋ฅ˜ ๋…ธํŠธ)

์šฉ๋‡ฝ 2021. 3. 14. 20:42
๋ฐ˜์‘ํ˜•

 

[React] Link ํด๋ฆญ ์‹œ url์€ ๋ฐ”๋€Œ์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๋Š” ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

 

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ

๋ฆฌ์•กํŠธ๋กœ ํŒ์ฝ˜ ํƒ€์ž„์„ ํด๋ก  ์ฝ”๋”ฉํ•˜๋Š” ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์ œ์ž‘ํ•˜๋ฉด์„œ ๊ณต๋ถ€ ์ค‘์—, Link (react-router-dom)์„ ํด๋ฆญํ•˜๋ฉด url์€ ๋ณ€๊ฒฝ์ด ๋˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ์ œ๋Œ€๋กœ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค.

ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋‹ˆ๊น ์ •๋ง ๋ณ„ ๊ฒƒ ์•„๋‹ˆ์—ˆ์ง€๋งŒ...(๊ฐœ๋… ๋ถ€์กฑ) ๋ฌด์—‡์ด ๋ฌธ์ œ์ด๊ณ , ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๋‹ค์‹œ ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

โ— ๋ฌธ์ œ

๋ฌธ์ œ์˜ ํ™”๋ฉด์ด๋‹ค.

 

๋ฌธ์ œ ํ™”๋ฉด

 

Detail ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์˜ํ™”์˜ ๊ด€๋ จ ์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค.

Detail ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ด€๋ จ ์˜ํ™”๋ฅผ ๋ณด์—ฌ์ค€ ๋’ค, ๊ด€๋ จ ์˜ํ™”๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ทธ ๊ด€๋ จ ์˜ํ™”์˜ Detail ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ์ง„์— ๋ณด์ด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ํด๋ฆญ์„ ํ•˜๋ฉด url์€ ์ž˜ ๋ณ€๊ฒฝ์ด ๋˜์ง€๋งŒ ํ•ด๋‹น ์˜ํ™”์˜ Detail์ด ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

๊ด€๋ จ๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ฝ”๋“œ๋“ค์ด๋‹ค.

DetailComponent 1
DetailComponent 2
Router

conosole.log๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ถœ๋ ฅํ•ด๋ณธ ๊ฒฐ๊ณผ ์ƒˆ๋กœ์šด api๊ฐ€ ๋ฐ›์•„์ง€์ง€ ์•Š์€ ์ฑ„๋กœ ๋ Œ๋”๋ง์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, url์€ ๋ณ€๊ฒฝ์ด ๋˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ๋ Œ๋”๋ง์„ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. 

โ—โ“ ํ•ด๊ฒฐ์ฑ…์„ ์–ป๊ธฐ๊นŒ์ง€...

์ด๊ฑฐ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๊ตฌ๊ธ€๋ง ํ•œ ํ”์ ๋“ค์ด๋‹ค.. ์‚ฌ์ง„์ƒ ์™ธ์— ์—„์ฒญ ๋งŽ์Œ...

 

๊ตฌ๊ธ€๋ง ํ”์ 

๊ตฌ๊ธ€๋ง์„ ํ•ด์„œ ์—ฌ๋Ÿฌ ํ•ด๊ฒฐ์ฑ…๋“ค์„ ์ ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋ชจ๋‘ ์ด์œ ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์ €๋Š” ๊ตฌ๊ธ€๋ง ํ•ด์„œ ๋‚˜์˜จ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ด ์•ˆ ๋˜์—ˆ๋‹ค.

ํ˜ผ์ž๋˜์ง€๋„ ์•Š๋Š” ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๋ฉด์„œ state๋ฅผ ์ด์šฉํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ ๋ Œ๋”๋ง ๋˜๊ฒŒ ํ•ด ๋ณผ๊นŒ..๋ผ๋Š” ๋“ฑ๋“ฑ ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด์„œ ๋ชจ๋‘ ์‹œ๋„ํ•ด๋ณด์•˜์ง€๋งŒ ๋ฌดํ•œ ๋ Œ๋”๋ง์ด ๋˜๋Š” ๋“ฑ ์˜ค๋ฅ˜๋งŒ ๋” ๋ฐœ์ƒํ•  ๋ฟ์ด์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ๋…ธ๋งˆ๋“œ์ฝ”๋” ์Šฌ๋ž™์˜ react ์ฑ„๋„์—๋‹ค๊ฐ€ ํ•ด๋‹น ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ๋”๋‹ˆ, ์Šฌ๋ž™์˜ ์ผ์›๋ถ„๊ป˜์„œ props๊ฐ€ ์—…๋ฐ์ดํŠธ๋์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ๋„ ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•ด๋ณด๋ผ๋Š” ์กฐ์–ธ์„ ๋ฐ›์•˜๋‹ค.

์กฐ์–ธ ๋•๋ถ„์— ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์— ์žˆ๋Š” ๋ฆฌ์•กํŠธ Lifecycle์„ ๋ณด๋ฉด์„œ ๋‹ค์‹œ ๊ณต๋ถ€๋„ ํ•˜๋ฉด์„œ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ๋ฐ”๋กœ componentDidUpdate๋ผ๋Š”Lifecycle์ด ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค.

ko.reactjs.org/docs/react-component.html

 

React.Component – React

A JavaScript library for building user interfaces

ko.reactjs.org

์ฒ˜์Œ์— ๋ฆฌ์•กํŠธ๋ฅผ ์ ‘ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๊ฐœ๋…์ด์ง€๋งŒ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ์ง€ ๋ชปํ•ด์„œ ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ ์ค‘ componentDidUpdate

 

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}`);

 

์ „,ํ›„ pathname conosle.log

 

์ด๋กœ์„œ if๋ฌธ์„ ํ†ตํ•ด์„œ ๋น„๊ตํ•œ ํ›„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋„๋ก ํ–ˆ๋‹ค.

ํ•ด๊ฒฐ๋œ ์ฝ”๋“œ๋‹ค.

 

ํ•ด๊ฒฐํ•œ ์ฝ”๋“œ

 

๐Ÿ‘€ ๊ฒฐ๊ณผ ํ™”๋ฉด

์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™์ด ์•„์ฃผ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๊ฒฐ๊ณผ ํ™”๋ฉด

๐Ÿ“• ๋งˆ์น˜๋ฉฐ

์• ์ดˆ์— ๋ฆฌ์•กํŠธ์˜ Lifecycle์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ํ™•์‹คํ•˜๊ฒŒ ์žกํ˜€์žˆ์—ˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด์—ˆ๋Š”๋ฐ ๊ฐœ๋…์ด ๋ถ€์กฑํ•œ ํƒ“์— ๋งŽ์ด ๋Œ์•„์˜จ ๊ฒƒ ๊ฐ™๋‹ค.

ํ˜„์žฌ ์ด ๋ฐฉ๋ฒ•์ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ ์ตœ์„ ์ผ์ง€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜, ์ €์—๊ฒŒ๋Š” ์ตœ์„ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฒˆ ๊ธฐํšŒ์— ํ™•์‹คํžˆ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ๋ž˜์„œ ๋‹ค์Œ์— Lifecycle์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋Š” ๊ณต๋ถ€ํ•˜๊ณ  ์ž‘์„ฑํ•  ์ƒ๊ฐ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์• ์ดˆ์— function ์ปดํฌ๋„ŒํŠธ๋กœ hook์„ ์‚ฌ์šฉํ–ˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ๋์„ ๊ฑฐ๋ผ๋Š” ๋ง์”€๋„ ์žˆ์—ˆ๋Š”๋ฐ...

์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์™„์„ฑ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ class ์ปดํฌ๋„ŒํŠธ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ๋“ค ๋ชจ๋‘ funciton ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ ์ค‘์ด์–ด์„œ

ํ˜„์žฌ ์ด ๊ธ€์—์„œ ์ž‘์„ฑํ•œ ์ปดํฌ๋„ŒํŠธ๋„ hook์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”๊ฟ”๋ณผ ์ƒ๊ฐ์ด๋‹ค.

๋ฐ˜์‘ํ˜•