React ๊ณต์‹ ๋ฌธ์„œ ๋‹ค์‹œ ์ฝ๊ธฐ (1. Main concepts)

Main Concepts

์ฒ˜์Œ React๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ฑฐ์˜ ์ดํ•ด ๋ชปํ•˜๊ณ  practice ์ •๋„๋งŒ ์ฐธ์กฐํ–ˆ์„ ๋“ฏ ์‹ถ์–ด์„œ ๋‹ค์‹œ ์ฝ์–ด๋ณด์•˜๋‹ค. ๊ฐœ๋…์„ ์ด๋ฒˆ์— ๋ช…ํ™•ํžˆ ํ–ˆ๋‹ค๊ฑฐ๋‚˜ ์ฒ˜์Œ ๋“ค์–ด๋ณธ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ, Main concept์—์„œ๋„ ๊ฝค๋‚˜ ๋งŽ์•˜๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ๋กœ ํ•ด๋‹น ์ •๋ฆฌ ๊ธ€์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค ๐Ÿ˜Š

 

Introducing JSX

React๋Š” ๊ธฐ์กด์— html, js ์™€ ๊ฐ™์ด ๊ธฐ๋Šฅ ๋ณ„๋กœ ๋ฌธ์„œ๋ฅผ ๋‚˜๋ˆ„๋˜ ๋ฐ์—์„œ ํ•œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ฒŒ ํ•จ์œผ๋กœ์จ js, html(jsx), css๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

JSX์˜ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋“ค์€ ๋ Œ๋” ์‹œ์ ์— ์ด๋ฏธ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ ๋˜๋ฏ€๋กœ XSS ๊ณต๊ฒฉ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Rendering Elements

React๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•˜๋‚˜์˜ root DOM ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด DOM ๋…ธ๋“œ์— React element๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด render๋œ๋‹ค.

ReactDOM.render(element, document.getElementById('root'));

React ์š”์†Œ๋“ค์€ ๋ถˆ๋ณ€์  ์š”์†Œ๋“ค์ด๋‹ค. ๋”ฐ๋ผ์„œ UI๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

Components and Props

์ปดํฌ๋„ŒํŠธ๋Š” props๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ React ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” JS ํ•จ์ˆ˜์ด๋‹ค.

React ์ƒ์—์„œ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” tag๋“ค์€ ๋ชจ๋‘ DOM tag๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
์ˆœ์ˆ˜ ํ•จ์ˆ˜(pure function)๋ž€ input์„ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๊ณ  input์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋˜‘๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  React์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๋ชจ๋‘ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์—ฌ์„œ props๋ฅผ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

 

State and LifeCycle

React๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ ํŠน์ • React Element๊ฐ€ DOM์— ์ฒ˜์Œ์œผ๋กœ ๋ Œ๋”๋˜๋Š” ๊ฒƒ์„ mounting์ด๋ผ๊ณ  ํ•˜๊ณ , ํ•ด๋‹น Element๊ฐ€ DOM์—์„œ ์ง€์›Œ์ง€๋Š” ๊ฒƒ์„ unmounting์ด๋ผ๊ณ  ํ•œ๋‹ค. mounting, unmounting ์‹œ ์‚ฌ์šฉ์ž๋Š” ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ lifecycle method๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • componentDidMount : mount ์‹œ ๋™์ž‘
  • componentWillUnmount : unmoount ์‹œ ๋™์ž‘

 

๐Ÿ’ก state์— ๋Œ€ํ•ด ์•Œ์•„๋‘ฌ์•ผ ํ•  ๊ฒƒ

  • state๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ constructor์—์„œ ๋ฟ์ด๋‹ค.
  • state๋Š” ๋™๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ด์ „ state๋‚˜ props๋ฅผ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด setState์— ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. this.setState((state, props) => ());
  • object state์˜ ๊ฒฝ์šฐ ํŠน์ • ์†์„ฑ๋งŒ ์—…๋ฐ์ดํŠธํ•ด๋„ ์ž๋™์œผ๋กœ mergeํ•ด์ค€๋‹ค.

 

Handling Events

์ด๋ฒคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ์žˆ์–ด์„œ React๊ฐ€ DOM์—์„œ์™€ ๋‹ค๋ฅธ ์ ์€

  • camelCase๋ฅผ ์“ด๋‹ค.
  • string์ด ์•„๋‹Œ function์„ ๋„˜๊ธด๋‹ค.
  • event๋ฅผ ๋ง‰์œผ๋ ค๋ฉด return false;ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ event.preventDefault();๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ด๋ฒคํŠธ ์†์„ฑ์—์„œ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์€ ๊ดœ์ฐฎ์ง€๋งŒ, ๋งŒ์•ฝ ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ props๋กœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋œ๋‹ค๋ฉด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ๋˜ํ•œ ๊ณ„์†ํ•ด์„œ re-rendering ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

const Parent = () => {
    const handleClick = () => {};
    return (
        <Child onClick={() => handleClick()} />
            // () => handleClick(); ์ด ๋ Œ๋”๋ง ์‹œ๋งˆ๋‹ค ๋ณ€๊ฒจ๋˜๋ฏ€๋กœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ์žฌ๋ Œ๋”๋ง
    );
}

 

Lists and Keys

React element์˜ list๋ฅผ rendering ํ•  ๋•Œ๋Š” ๊ฐ item์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด string type์˜ key ์†์„ฑ์ด ํ•„์š”ํ•˜๋‹ค. key๋Š” globally uniqueํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ, sibiling๋“ค ์‚ฌ์ด์—์„œ(๊ฐ™์€ level์—์„œ)๋Š” uniqueํ•ด์•ผ ํ•œ๋‹ค.

 

Index as a key is an anti-pattern

So many times I have seen developers use the index of an item as its key when they render a list.

robinpokorny.medium.com

 

Composition vs Inheritance

class๊ฐ€ ์•„๋‹ˆ๋ฉด ์ƒ์†์ด๋ผ๋Š” ์žฅ์ ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. ํ•˜์ง€๋งŒ children์„ props๋กœ ๋„˜๊ฒจ์ฃผ๋Š” composition์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Thinking in react

React๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ

  • ์šฐ์„  ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ UI๋ฅผ ๋‚˜๋ˆ„์ž.
  • ์ปดํฌ๋„ŒํŠธ์˜ ๋‹จ์œ„๊ฐ€ ์• ๋งคํ•˜๋‹ค๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ๋– ์˜ฌ๋ ค๋ณด์ž. ์ปดํฌ๋„ŒํŠธ๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ๋‘๊ณ  ํ•˜๋‚˜์˜ ์ผ๋งŒ ํ•œ๋‹ค.
  • ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๋จผ์ € ๋งŒ๋“ค์ž.
  • state๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด๋ณด์ž.
  • ์ตœ์†Œํ•œ์˜ State๋ฅผ ์ •์˜ํ•˜์ž.
  • State์˜ ์œ„์น˜๋ฅผ ์ •ํ•˜์ž.
  • ๋ฐ˜๋Œ€๋กœ ํ๋ฅด๋Š” data flow๋ฅผ ๋„ฃ์ž.
๋ฐ˜์‘ํ˜•