React#
props ๋ฅผ ํตํด ์ปดํฌ๋ํธ์๊ฒ ๊ฐ ์ ๋ฌํ๊ธฐ (๊ณ์)#
defaultProps ๋ก ๊ธฐ๋ณธ๊ฐ ์ค์ #
Hello.js
import React from 'react';
function Hello({color, name}) { return <div style={{color}}>์๋
ํ์ธ์ {name}</div>;}
Hello.defaultProps = { name: '์ด๋ฆ์์',};
export default Hello;์ด๋ ๊ฒ ์ปดํฌ๋ํธ์ props ๋ฅผ ์ง์ ํ์ง ์์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ๊ฐ์ ์ค์ ํ ์์๋ค.
App.js
import React from 'react';import Hello from './Hello';
function App() { return ( <> <Hello name="react" color="red" /> <Hello color="pink" /> </> );}
export default App;
props.children#
์ปดํฌ๋ํธ ํ๊ทธ ์ฌ์ด์ ๋ฃ์ ๊ฐ์ ์กฐํํ๊ณ ์ถ์ ๋, props.children ์ ์กฐํํ๋ฉด ๋๋ค.
props.children ์ ์ฌ์ฉํ๋ Wrapper.js ๋ฅผ ๋ง๋ค์ด ๋ณธ๋ค.
Wrapper.js
import React from 'react';
function Wrapper() { const style = { border: '2px solid black', padding: '16px', }; return <div style={style}></div>;}
export default Wrapper;App.js
import React from 'react';import Hello from './Hello';import Wrapper from './Wrapper';
function App() { return ( <Wrapper> <Hello name="react" color="red" /> <Hello color="pink" /> </Wrapper> );}
export default App;์ด๋ ๊ฒ ํ๋ฉด ๋ด๋ถ์ ๋ด์ฉ์ด ๋ณด์ด์ง ์๋๋ค. Wrapper.js ์์ props.children ์๋ ๋๋งํด์ฃผ์ด์ผ ํ๋ค.
Wrapper.js
import React from 'react';
function Wrapper(props) { // props ๋์ { children } ์ผ๋ก ๋น๊ตฌ์กฐํ ํ ๋น ํ const style = { border: '2px solid black', padding: '16px', }; return ( <div style={style}> {props.children} {/* ์ฌ๊ธฐ์ children ์ผ๋ก๋ง ๋ฐ์๋ ๋๋ค. */} </div> );}
export default Wrapper;
์กฐ๊ฑด๋ถ ๋ ๋๋ง#
props ๋ฅผ ์ด์ฉํ์ฌ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์ ๋ ๋๋ง ํ๋๋ก ํ ์ ์๋ค.
App.js
import React from 'react';import Hello from './Hello';import Wrapper from './Wrapper';
function App() { return ( <Wrapper> <Hello name="react" color="red" isSpecial={true} /> <Hello color="pink" /> </Wrapper> );}
export default App;isSpecial ์ด๋ผ๋ props ๋ฅผ ์ ๋ฌํ๊ณ , (์ด ๋ true ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ด๋ฏ๋ก์ค๊ดํธ๋ก ๊ฐ์ธ์ผํ๋ค.
Hello.js
import React from 'react';
function Hello({color, name, isSpecial}) { return ( <div style={{color}}> {isSpecial ? <b>*</b> : null} ์๋
ํ์ธ์ {name} </div> );}
Hello.defaultProps = { name: '์ด๋ฆ์์',};
export default Hello;์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ํ ๋จ์ถ ํ๊ฐ ๋
ผ๋ฆฌ ๊ณ์ฐ๋ฒ์ผ๋ก isSpecial && <b>*</b> ๋ก ํ ์๋ ์๋ค.
๋ํ props ๊ฐ์ ์ค์ ํ ๋ ์ด๋ฆ๋ง ์์ฑํ๊ณ ๊ฐ ์ค์ ์ ์๋ตํ ๊ฒฝ์ฐ ์ด๋ฅผ true ๋ก์ค์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
App.js
import React from 'react';import Hello from './Hello';import Wrapper from './Wrapper';
function App() { return ( <Wrapper> <Hello name="react" color="red" isSpecial /> <Hello color="pink" /> </Wrapper> );}
export default App;Hello.js
import React from 'react';
function Hello({color, name, isSpecial}) { return ( <div style={{color}}> {isSpecial ? alert(isSpecial) : null} ์๋
ํ์ธ์ {name} </div> );}
Hello.defaultProps = { name: '์ด๋ฆ์์',};
export default Hello;isSpecial ์ ๊ฐ์ ์ค์ ํ์ง ์๊ณ Hello.js ์์ ๋ง์ฝ isSpecial ์ด true ๋ผ๋ฉด isSpecial ์ alert๋ก ๋ด๋ณด๋ด๊ฒ ํ๋ค.

true ๊ฐ ์ถ๋ ฅ๋๋ค.
useState ๋ฅผ ํตํด ์ปดํฌ๋ํธ์์ ๋ฐ๋๋ ๊ฐ ๊ด๋ฆฌํ๊ธฐ#
Counter ์์ ๋ฅผ react๋ก ๊ตฌํํด ๋ณธ๋ค.
App.js
import React from 'react';import Counter from './Counter';
function App() { return <Counter />;}
export default App;Counter.js
import React, {useState} from 'react';
function Counter() { const [number, setNumber] = useState(0);
const onIncrease = () => { setNumber(number + 1); };
const onDecrease = () => { setNumber(number - 1); };
return ( <div> <h1>{number}</h1> <button onClick={onIncrease}>+1</button> <button onClick={onDecrease}>-1</button> </div> );}
export default Counter;ํจ์ํ ์ ๋ฐ์ดํธ#
์ด ๋, setNumber ํจ์(Setter ํจ์)๋ฅผ ์ฌ์ฉํ ๋ ์
๋ฐ์ดํธ ํ๊ณ ์ถ์ ์๋ก์ด ๊ฐ์ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ฃผ๊ณ ์๋๋ฐ, ๊ทธ ๋์ ๊ธฐ์กด์ ๊ฐ์ ์ด๋ป๊ฒ ์
๋ฐ์ดํธ ํ ์ง์ ๋ํ ํจ์๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ์์ผ๋ก๋ ๊ฐ์ ์
๋ฐ์ดํธ ํ ์ ์๋ค.
Counter.js
import React, {useState} from 'react';
function Counter() { const [number, setNumber] = useState(0);
const onIncrease = () => { setNumber((prevNumber) => prevNumber + 1); };
const onDecrease = () => { setNumber((prevNumber) => prevNumber - 1); };
return ( <div> <h1>{number}</h1> <button onClick={onIncrease}>+1</button> <button onClick={onDecrease}>-1</button> </div> );}
export default Counter;