null
๋๋ 0
์ ์ ๋ฌํ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ด ์ฌ์ฉ ๋์ง ์๋๋ค.function Profile(props) {
return (
<div className="card">
<Avatar {...props} />
</div>
);
}
A component may receive different props over time. Props are not always static!
Props๋ ์ฒ์์๋ง ์๋๋ผ ๋ชจ๋ ์์ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ props๋ ๋ถ๋ณํ๋ค. ์ปดํฌ๋ํธ๊ฐ props๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๋๋ ์ปดํฌ๋ํธ์ ์๋ก์ด props๋ฅผ ์ ๋ฌํ๋๋ก ์์ฒญํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ props๋ ๋ฒ๋ ค์ง๊ณ , ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ props๊ฐ ๊ฐ์ ธ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
props๋ฅผ ๋ฐ๊พธ๋ ค๊ณ ํ์ง๋ง์. ์ํธ์์ฉ์ด ํ์ํ ๊ฒฝ์ฐ์๋ state๋ฅผ ์ฐ๋ฉด ๋๋ค.
Deep Dive: Are these two examples fully equivalent?
ex. 1
if (isPacked) {
return <li className="item">{name} โ</li>;
}
return <li className="item">{name}</li>;
ex. 2
return <li className="item">{isPacked ? name + ' โ' : name}</li>;
JSX ์์๋ ์ธ์คํด์ค๊ฐ ์๋๋ค. ์๋ํ๋ฉด JSX ์์๋ ๋ด๋ถ ์ํ๋ฅผ ๋ณด์ ํ์ง ์์๊ณ , ์ค์ DOM ๋ ธ๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ ๋ ์์๋ ์์ ํ ๋์ผํ๋ค.
Logical AND operator &&
๋
ผ๋ฆฌ ์ฐ์ฐ์ &&๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์ด true
์ผ ๋๋ ์ผ๋ถ JSX๋ฅผ ๋ ๋๋งํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์๋๋ค.
๐ย &&
์ผ์ชฝ์ ์ซ์๋ฅผ ๋ฃ์ง ๋ง์. ์กฐ๊ฑด์ ํ๋ณํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ผ์ชฝ์ ์๋์ผ๋ก boolean
๋ก ๋ณํํ๋ค. ์ด๋ค ๊ฐ์ด 0
์ด๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๊ธฐ ์ฝ์ง๋ง ์ค์ ๋ก๋ 0
๊ทธ ์์ฒด๋ฅผ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ ๊ฐ์ด boolean
์ด ๋์ด์ผ ํ๋ค.
key
Each child in a list should have a unique โkeyโ prop.
uniqueํ string
์ด๋ number
๊ฐ์ ์ฌ์ฉํด์ ๋ฆฌ์คํธ์ ๊ฐ ์์ดํ
์ key๋ฅผ ์ฃผ๋ฉด ํด๊ฒฐ๋๋ค.
<li key={person.id}>...</li>
key
๋ React์๊ฒ ๊ฐ ์ปดํฌ๋ํธ์ ํด๋นํ๋ ๋ฆฌ์คํธ ์์ดํ
์ ์๋ ค์ฃผ์ด ๋์ค์ ๋งค์น์ํฌ ์ ์๋ค. ๋ฆฌ์คํธ ์์ดํ
์ด ์ ๋ ฌ๋๊ฑฐ๋ ์ฝ์
๋๊ฑฐ๋ ์ญ์ ๋๋ ๋ฑ ์ด๋ค ๋ณํ๊ฐ ์๊ฒผ์ ๋, key
๊ฐ React์๊ฒ ์ ํํ ๋ฌด์จ์ผ์ด ์ผ์ด๋ฌ๋์ง ์๋ ค์ฃผ๊ณ DOM ํธ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์
๋ฐ์ดํธํ๋ ๊ฒ์ ๋์์ ์ค๋ค.
<>โฆ</>
Fragment ๊ตฌ๋ฌธ์ผ๋ก๋ ํค๋ฅผ ์ ๋ฌํ ์ ์๊ธฐ ๋๋ฌธ์, <div>
๋ <Fragment>
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
const listItems = people.map(person => (
<Fragment key={person.id}>
<h1>{person.name}</h1>
<p>{person.bio}</p>
</Fragment>
));
Where to get yourย key
key
๋ ID
๋ฅผ ์ฐ๋ฉด ์์ฐ์ค๋ฝ๊ฒ unique ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.Rules of keys
key
๋ ํ์ ๊ฐ์ ๊ณ ์ ํด์ผ ํ๋ค. (๋จ, ๋ค๋ฅธ ๋ฐฐ์ด์์๋ ๊ฐ์ ํค๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.)key
๋ ๋ณ๊ฒฝ๋์ด์ ์๋๊ณ , key
์ ๋ชฉ์ ์ ์ด๊ธ๋๋ฉด ์๋๋ค. ๋ ๋๋งํ๋ ๋์ ์์ฑํ๋ฉด ์๋๋ค. Why does React need keys?
ํด๋์ ํ์ผ ์ด๋ฆ๊ณผ ๋ฐฐ์ด์์ JSX key
๋ ๋น์ทํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ํ์ ๊ฐ์ ์์ดํ
์ ๊ณ ์ ํ๊ฒ ์ธ์ํ ์ ์๊ฒ ํด์ค๋ค.
๐ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key
๋ก ์ฌ์ฉํ์ง ๋ง์. ๋ฐฐ์ด์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด ์ธ๋ฑ์ค๊ฐ ๋ณํ๊ณ , ์ด๋ ํผ๋์ค๋ฌ์ธ ์ ์๋ค. ๋, key
๋ฅผ ์ฆ์์์ ์์ฑํ์ง ๋ง์. ์ฆ์์ผ๋ก ์์ฑํ๋ฉด ๋ ๋๋ง ์์ ํค๊ฐ ์ผ์นํ์ง ์์ ๋ชจ๋ ์ปดํฌ๋ํธ์ DOM์ด ๋งค๋ฒ ๋ค์ ์์ฑ๋๋ค.
Purity: Components as formulas
Pure function์ ์๋์ ๊ฐ์ ํน์ฑ์ด ์๋ค.
ํจ์๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์ด๋ฏธ ์กด์ฌํ ๊ฐ์ฒด๋ ๋ณ์๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค.
๊ฐ์ ์
๋ ฅ์ ํ๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํ๋ค.
React์์๋ ์์ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ปดํฌ๋ํธ๋ pure function์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์๋ค. ์ด๊ฒ์ ์์ฑํ ์ปดํฌ๋ํธ๊ฐ ํญ์ ๊ฐ์ JSX๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ง์น ์ํ ๊ณต์์ฒ๋ผ ๋ง์ด๋ค.
Pure function์ ๊ท์น์ ์ด๊ธด ์์๋ฅผ ๋ณด์. ๋ณ์๋ฅผ ์ง์ ์ ์ผ๋ก ๋ฐ๊พธ๋ฉด์ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํด๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
let guest = 0;
function Cup() {
// Bad: changing a preexisting variable!
guest = guest + 1;
return <h2>Tea cup for guest #{guest}</h2>;
}
export default function TeaSet() {
return (
<>
<Cup />
<Cup />
<Cup />
</>
);
}
Pure function์ผ๋ก ๋ฐ๊พธ๋ฉด ์๋์ ๊ฐ๋ค. guest
๋ผ๋ prop์๋ง ์์กดํ์ฌ ๋ฐํํ๋ค.
function Cup({ guest }) {
return <h2>Tea cup for guest #{guest}</h2>;
}
export default function TeaSet() {
return (
<>
<Cup guest={1} />
<Cup guest={2} />
<Cup guest={3} />
</>
);
}
Deep Dive: Detecting impure calculations with StrictMode
React๋ ๊ฐ๋ฐ ์ค์ ๊ฐ ์ปดํฌ๋ํธ ํจ์๋ฅผ 2๋ฒ ํธ์ถํ๋ Strict Mode
๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ํจ์๊ฐ Pure function์ ๊ท์น์ ์ด๊ฒผ๋์ง ์ฐพ๋ ๊ฒ์ ๋์์ค๋ค.
Strict Mode
๋ ๋ฐฐํฌ์ ์๋ฌด ์ํฅ์ด ์๋ค. ๊ทธ๋์ ์ฌ์ฉ์๋ฅผ ์ํ ์๋น์ค๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋ค์ง ์๋๋ค.
Local mutation: Your componentโs little secret
์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์๋ฅผ ๋ ๋๋ง ์ค์ ๋ฐ๊พธ๋ ๊ฒ์ mutation
์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Pure function์ ํจ์ ๋ฒ์ ๋ฐ์ ๋ณ์๋ ํธ์ถ ์ ์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋ณ์๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ฌธ์ ๋์ง ์๋๋ค. ์๋ํ๋ฉด ๋ด๋ถ์์ ๋์ผํ ๋ ๋๋ง ์ค์ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
function Cup({ guest }) {
return <h2>Tea cup for guest #{guest}</h2>;
}
export default function TeaGathering() {
let cups = [];
for (let i = 1; i <= 12; i++) {
cups.push(<Cup key={i} guest={i} />);
}
return cups;
}
Where youย canย cause side effects
ํ๋ฉด ์
๋ฐ์ดํธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฑ ์ฌ๋ฌ ๋ณ๊ฒฝ ์ฌํญ์ side effects
๋ผ๊ณ ํ๋ค. ๋ ๋๋ง ๋์์ ์ผ์ด๋๋๊ฒ ์๋๋ผ side
์์ ์ผ์ด๋๋ค.
React์์ side effects
๋ ์ฃผ๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ํด์๋ค. ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ปดํฌ๋ํธ ๋ด๋ถ์ ์ ์๋์ด ์์ด๋ ๋ ๋๋ง ๋์ ์คํ๋์ง๋ ์๋๋ค. ๊ทธ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ pureํ๊ฒ ํ์ง ์์๋ ๋๋ค.