์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ โ
- ์ด๊ธฐ ๊ฐ์ ์ ๋ฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ
{}
์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํฉ๋๋ค.- JSX์์ ํน์ ํ๊ทธ์ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด์๋
{}
๋ฅผ ์ด์ฉํ๊ฑฐ๋ ๋ฌธ์์ด๋ก ์ ๋ฌํ์ฌ์ผ ํฉ๋๋ค
โ App.js
mport './App.css';
import MyHeader from './my_header';
import Counter from './count';
function App() {
return (
<div className="App">
<MyHeader />
<Counter initialValue={5} /> // 5๋ผ๋ ๊ฐ์ ์ ๋ฌ ํฉ๋๋ค.
</div>
);
}
export default App;
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ App ์์ ์์ ์ปดํฌ๋ํธ์ธ Counter ์๊ฒ ๊ฐ์ ์ ๋ฌ
๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ โ
โ Count.js
import React, { useState } from 'react';
const Counter = (props) => { // ๋งค๊ฐ๋ณ์๋ก props ๋ฅผ ๋ฐ์ต๋๋ค.
const [count, setCount] = useState(props.initialValue);
const onIncrease = () => {
setCount(count + 1); // 0 + 1
};
const onDecrease = () => {
setCount(count - 1);
};
return (
<div>
<h2>{count}</h2>
<button onClick={onIncrease}>+</button>
<button onClick={onDecrease}>-</button>
</div>
);
};
export default Counter;
- ๊ฐ์ฒด์์ ๋ด๊ฒจ์ ๋ฐ์์ค๊ณ (๊ฐ์์ ์๊ด์์ด), ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ ์ ๊ทผ ํ ์ ์์ต๋๋ค.
์ ๋ฌํ๋ ๊ฐ์ด ๋ง์์ง๋ฉด โ
<Counter initialValue={5}, a={1}, b={2}, c={3} />
- ๊ฐ๋ ์ฑ์ด ์ข์ง ์์ต๋๋ค.
โ ์์ ๊ฐ์ ๊ฒฝ์ฐ๋
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์
Spread
์ฐ์ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋ฌ ํ ์ ์์ต๋๋ค.
โ App.js
import './App.css';
import MyHeader from './my_header';
import Counter from './count';
function App() {
const counterProps = {
a: 1,
b: 2,
c: 3,
initialValue: 5,
};
return (
<div className="App">
<MyHeader />
<Counter {...counterProps} />
</div>
);
}
export default App;
โ count.js
const Counter = ({ initialValue }) => { // props์ ๊ฐ ์ค์์ initialValue๋ง ๊ฐ์ ธ์๋ค.
const [count, setCount] = useState(initialValue);
- ๋น๊ตฌ์กฐํ ํ ๋น์ ํตํด ๋ฐ์ ์ ์์ต๋๋ค.
- ํ์ง๋ง ์ข
์ข
๊ฐ์ด ์๋์น ์๊ฒ
undefined
๋ก ์ ๋ฌ ๋์ด์ง๋ ๋ฒ๊ทธ๋ฅผ ๋ง์ฃผ ํ ์ ์์ต๋๋ค. - ๋ง์ฝ, ์์ ๊ฐ์ ์ํฉ์ ๋ง์ฃผํ ๊ฒฝ์ฐ
.defalutProps
๋ฅผ ํ์ฉ ํฉ๋๋ค.
import React, { useState } from 'react';
const Counter = ({ initialValue }) => {
console.log(initialValue);
const [count, setCount] = useState(initialValue);
const onIncrease = () => {
setCount(count + 1); // 0 + 1
};
const onDecrease = () => {
setCount(count - 1);
};
return (
<div>
<h2>{count}</h2>
<button onClick={onIncrease}>+</button>
<button onClick={onDecrease}>-</button>
</div>
);
};
Counter.defaultProps = {
initialValue = 0;
}
export default Counter;
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ
App.js
์์ ๋ด๋ ค์ค ์ ์ด ์์ผ๋,defaultProps
์ ์ํด์ 0 ์ผ๋ก ๊ณ ์ ๋ฉ๋๋ค. - ์ฆ, ์ ๋ฌ ๋ฐ์ง ๋ชปํ
props
์ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํด์ ์๋ฌ๋ฅผ ๋ฐฉ์ง ํ ์ ์์ต๋๋ค.
โ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ Props ๋ก ์ ๋ฌ
ํ์ฌ Counter ์ ๋ชจ์ต
- ์คํ์ผ์ด ํ๋๋ ๋ค์ด๊ฐ์ง ์์ ๋ณด๊ธฐ์ ๋ถํธ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ์ ์คํ์ผ์ ๋ง๋ค๊ณ ,
props
๋ก ์ ๋ฌ์ ํ๊ฒ ์ต๋๋ค.
โ Container.js
const Container = ({children) => {
return (
<div style={{ margin: 20, padding: 20, border: '1px solid gray' }}>
{children}
</div>
);
};
export default Container;
- Container ์ปดํฌ๋ํธ๋
children
์ด๋ผ๋ props ๋ฅผ ๋ฐ์ต๋๋ค.
โ App.js
import './App.css';
import MyHeader from './my_header';
import Counter from './count';
import Container from './Container';
function App() {
const counterProps = {
a: 1,
b: 2,
c: 3,
initialValue: 5,
};
return (
<Container> // ์ถ๊ฐ
<div className="App"> // </div> ๊น์ง children ์ ์ ๋ฌ
<MyHeader />
<Counter {...counterProps} />
</div>
</Container>
);
}
export default App;
- ์ปดํฌ๋ํธ ์ฌ์ด์ JSX ์์๋ค์ ๋ฐฐ์น ํ์ต๋๋ค.
Container
์ ์์์ผ๋ก ๋ฐฐ์น๋ ์์๋ค์Container
์children
props ์ผ๋ก ์ ๋ฌ์ด ๋ฉ๋๋ค.
โ ์ฐธ๊ณ
'๐ Front-End > React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
useRef (0) | 2022.10.23 |
---|---|
์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ (0) | 2022.10.23 |
State(์ํ) (0) | 2022.10.23 |
JSX ๋ฌธ๋ฒ (0) | 2022.10.23 |
Create-React-App (0) | 2022.10.23 |