03. React

1. ์˜ค๋Š˜์˜ ๊ฐ•์˜ ์š”์•ฝ

  • ๋ฆฌ์•กํŠธ = ์ƒํƒœ๋ฅผ ์ž˜ ๊ณจ๋ผ๋‚ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ

  • ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋Š” ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง

  • ์ƒํƒœ๋ž€?

    • ๋ณ€ํ™”, ๊ณ„์‚ฐ, ์ฃผ์ž…์—ฌ๋ถ€

2. ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ

2-1. ์ƒํƒœ๋ž€

state as a snapshot useState๋Š” ๋น„๋™๊ธฐ์ธ์ค„ ์•Œ์•˜์ง€? ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด ๋™๊ธฐ! ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์„ ์–ธ๋œ ํ•จ์ˆ˜ ์ค‘ ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ ํด๋กœ์ ธ!

2-2. ๋ Œ๋”๋ง?

๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ณ€ํ™”๋œ ๊ฑฐ ๋ญ”์ง€ ํŒŒ์•… - diffing ์žฌ์กฐ์ • reconciliation

2-3. ๋ฆฌ๋ Œ๋”๋ง์€ ์–ธ์ œ?

๋™์ผํ•œ ์œ„์น˜์—์„œ ๋™์ผํ•œ ๋…ธ๋“œ (์ด ๊ธฐ์ค€์€ ํƒ€์ž…, props, ์ƒํƒœ)๊ฐ€ ๋ Œ๋”๋ง ์š”์ฒญ์ด ์˜ค๋ฉด, ์ƒˆ๋กœ ๊ทธ๋ฆฌ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์›๋ž˜ ์žˆ๋˜๊ฑธ "์œ ์ง€" ํ•จ ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด ๊ฐ™์ด ์•ˆ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด react.memo key = props๊ฐ€ ์•ˆ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒƒ ๋ฐฉ์ง€

2-4. ๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๋ฆฌ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ = ์•ˆํ•ด๋„ ๋˜๋Š” ์• ๋“ค์€ ์ ์ ˆํžˆ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ

  • React.memo: props๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๊ฑด๋„ˆ๋œ€

    • ์ด ๋•Œ, ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค์˜ ๊ธฐ์ค€์€ === (์–•์€ ๋น„๊ต)

    • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐ์ฒด์˜ ๊ฐœ๋ณ„ ํ•„๋“œ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•˜๊ณ , ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ธ์ง€ ํ™•์ธ

  • props๋กœ children์ด ์ „๋‹ฌ๋˜์—ˆ์„ ๋•Œ

    • ์ด์ „๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์š”์†Œ์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์–ด๋„ ์ฃผ์†Œ๊ฐ’์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— props์˜ ๋ณ€ํ™”๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • useMemo ์‚ฌ์šฉํ•˜๊ธฐ: ์˜์กด๋ฐฐ์—ด์— ๋“ค์–ด๊ฐ„ ๋ณ€์ˆ˜๋“ค์ด ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด useMemo์—๋Ÿฌ ๋ฐ˜ํ™˜๋œ ์š”์†Œ๋Š” ๋ฆฌ๋ Œ๋”๋ง ๋˜์ง€ ์•Š์Œ

  • useLayoutEffect: state๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณ€ํ•ด๋„ ์ตœ์ข…๊ฐ’๋งŒ ์ ์šฉ์‹œ์ผœ์„œ ๋ Œ๋”๋งํ•จ

  • React.Component.shouldComponentUpdate(): ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ์จ ๋ฆฌ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ์ปค์Šคํ…€ ํ•˜๋Š” ํ•จ์ˆ˜

  • React.PureComponent:

Last updated