#
Reactprops
๋ฅผ ํตํด ์ปดํฌ๋ํธ์๊ฒ ๊ฐ ์ ๋ฌํ๊ธฐ (๊ณ์)#
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;