728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ๋ชจ๋ฌ์ฐฝ์ด ์ด๋ ค์์ ๋ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด, ๋ชจ๋ฌ์ฐฝ์ ์ ๋ชฉ ๋ถ๋ถ์ ๊ฒ์๊ธ์ ์ ๋ชฉ์ผ๋ก ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด์ ๋ง์น ์์ธํ์ด์ง๋ฅผ ์ฌ๋ ๋ฏํ ํจ๊ณผ๋ฅผ ์ฃผ์๋ค.
๐ props ์ดํดํ๊ธฐ
๐ค ๊ธฐ์กด ๋ชจ๋ฌ์ฐฝ ๋ค์ ๋ณด๊ธฐ
- ๊ธฐ์กด ๋ชจ๋ฌ์ฐฝ์ ๋ค์ ๋ณด๋ฉด ์ ๋ชฉ, ๋ ์ง, ์์ธ๋ด์ฉ์ด ํ๋์ฝ๋ฉ๋์ด์๋๋ฐ, ๊ทธ ์ค ์ ๋ชฉ ๋ถ๋ถ์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ๋์ด ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ด๋ค.
๐ค props ์ดํดํ๊ธฐ
// ์ฝ๋์์ App Component ์ <Modal /> Component ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด
// ๋ถํ์ํ ์ฝ๋๋ ์์๋ก ์ ์ธํ๋ค.
function App() {
let [title, setTitle] = useState([
'[React] React ์ค์น์ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
ํ๊ธฐ',
'[React] JSX ๋ฅผ ์ด์ฉํด HTML ํ์ด์ง ์ ์ํด๋ณด๊ธฐ',
'[React] React ์์ state ๋ณ๊ฒฝํด๋ณด๊ธฐ'
]);
let [modal, setModal] = useState(false);
return (
<div className="App">
{
title.map(function(content){
return (
<div className='list'>
<h3>{content}</h3>
<p>2022-03-18</p>
<hr/>
</div>
)
})
}
<button onClick={ ()=>{ setModal(!modal) } }>๋ชจ๋ฌ์ฐฝ ์ฌ๋ซ๊ธฐ</button>
{modal === true ? <Modal /> : null}
</div>
);
}
- ์์ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด App ์ด๋ผ๋ Component ์์ <Modal /> ์ด๋ผ๋ Component ๊ฐ ๋ค์ด์๋ค.
- ์ด๋ฅผ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ผ๊ณ ํ๋ฉฐ, ์ด ๋ App ์ด ๋ถ๋ชจ์ ํด๋นํ๋ฉฐ Modal ์ด ์์์ ํด๋นํ๋ค.
- ๋ชจ๋ฌ์ฐฝ์ ์ ๋ชฉ ๋ถ๋ถ์ ๊ฒ์๊ธ์ ์ ๋ชฉ๋ค์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํด์ฃผ๊ธฐ ์ํด์๋ title ์ด๋ผ๋ state ๋ฅผ <Modal /> Component ์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ ๊ฒ ์์ Component ๊ฐ ๋ถ๋ชจ Component ์์ ์๋ state ๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ธฐ ์ํด์๋ props ๋ผ๋ ๋ฌธ๋ฒ์ผ๋ก state ๋ฅผ ์ ์ก๋ฐ์ { props.state์ด๋ฆ } ์ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
- props ์ ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- < ์์_Component ์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ = { state_์ด๋ฆ } > ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ์์ Component ๋ฅผ ์ ์ธํ๋ function ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ค.
๐ <Modal /> ์ ์ฒซ๋ฒ์งธ ๊ฒ์๊ธ ์ ๋ชฉ ํ๋๋ง ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํด๋ณด๊ธฐ
๐ค props ์ฌ์ฉํด๋ณด๊ธฐ
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
function App() {
let [title, setTitle] = useState([
'[React] React ์ค์น์ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
ํ๊ธฐ',
'[React] JSX ๋ฅผ ์ด์ฉํด HTML ํ์ด์ง ์ ์ํด๋ณด๊ธฐ',
'[React] React ์์ state ๋ณ๊ฒฝํด๋ณด๊ธฐ'
]);
let [modal, setModal] = useState(false);
return (
<div className="App">
{
title.map(function(content, idx){
return (
<div className='list'>
<h3>{content}</h3>
<p>2022-03-18</p>
<hr/>
</div>
)
})
}
<button onClick={ ()=>{ setModal(!modal) } }>๋ชจ๋ฌ์ฐฝ ์ฌ๋ซ๊ธฐ</button>
{modal === true ? <Modal title={title} : null}
</div>
);
}
function Modal(props){
return (
<div className='modal'>
<h2>์ ๋ชฉ: {props.title[0]}</h2>
<p>๋ ์ง: 2022-03-18</p>
<p>์์ธ๋ด์ฉ</p>
</div>
)
}
- ์์ <Modal /> ์ด๋ผ๋ ์์ Component ๊ฐ App ์ด๋ผ๋ ๋ถ๋ชจ Component ๊ฐ ๊ฐ์ง๊ณ ์๋ state ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด props ๋ผ๋ ๋ฌธ๋ฒ์ผ๋ก state ๋ฅผ ์ ์ก๋ฐ์์ผํ๋ค๊ณ ํ๋ค.
{modal === true ? <Modal title={title} /> : null}
- < ์์_Component ์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ = { state_์ด๋ฆ } > ๋ผ๋ ์์์ ๋ง์ถ์ด ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
- ์์_Component : Modal
- ์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ : title
- state_์ด๋ฆ : title
function Modal(props){
return (
<div className='modal'>
<h2>์ ๋ชฉ: {props.title[0]}</h2>
<p>๋ ์ง: 2022-03-18</p>
<p>์์ธ๋ด์ฉ</p>
</div>
)
}
- ๊ทธ๋ฌ๊ณ ๋์, ์์ Component ๋ฅผ ์ ์ธํ๋ function ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ค.
- ๋ณดํต ๊ด์ต์ ๋ฐ๋ผ ํ๋ผ๋ฏธํฐ๋ช ์ props ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฌ๋ฉด ๋ถ๋ชจ Component ์์ ์ ์ก๋ฐ์ state ๋ค์ด ๊ฐ์ฒด์ ํํ๋ก props ๋ผ๋ ํ๋ผ๋ฏธํฐ์ด๋ฆ์ผ๋ก ์ ๋ฌ์ด ๋๋ค.
- ๋ฐ๋ผ์ props.์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ ๊ณผ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ๋ค๋ง, ์ ์ฝ๋์ ๊ฒฝ์ฐ ๋ฐ์์จ title ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ก๋ฐ์ title state ์ ์๋ฃํ์ด array ์ด๋ฏ๋ก ์ธ๋ฑ์ค๊น์ง ์ฝ๋๋ก ์ ์ด์ฃผ์ด์ผ ์ ๋๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๐ค ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ์ฌ๋ถ ํ์ธํด๋ณด๊ธฐ
- ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ฌ์ฐฝ์ ํ์ธํ๋ฉด ์ ์์ ์ผ๋ก title state ์ 0๋ฒ ์ธ๋ฑ์ค ๊ฐ์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ <Modal /> ์ ํด๋ฆญํ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํด๋ณด๊ธฐ
๐ค props ํ์ฉํด๋ณด๊ธฐ
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
function App() {
let [title, setTitle] = useState([
'[React] React ์ค์น์ ๊ฐ๋ฐํ๊ฒฝ ์
ํ
ํ๊ธฐ',
'[React] JSX ๋ฅผ ์ด์ฉํด HTML ํ์ด์ง ์ ์ํด๋ณด๊ธฐ',
'[React] React ์์ state ๋ณ๊ฒฝํด๋ณด๊ธฐ'
]);
let [modal, setModal] = useState(false);
let [clickedNum, setClickedNum] = useState(0);
return (
<div className="App">
{
title.map(function(content, idx){
return (
<div className='list'>
<h3 onClick={()=>{setClickedNum(idx)}}>{content}</h3>
<p>2022-03-18</p>
<hr/>
</div>
)
})
}
<button onClick={ ()=>{ setModal(!modal) } }>๋ชจ๋ฌ์ฐฝ ์ฌ๋ซ๊ธฐ</button>
{modal === true ? <Modal title={title} clickedNum={clickedNum}/> : null}
</div>
);
}
function Modal(props){
return (
<div className='modal'>
<h2>์ ๋ชฉ: {props.title[props.clickedNum]}</h2>
<p>๋ ์ง: 2022-03-18</p>
<p>์์ธ๋ด์ฉ</p>
</div>
)
}
- ์ด๋ฒ์๋ ๋ฐฐ์ด ๊ฒ๋ค์ ์์ฉํ์ฌ ๊ฐ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด, ๊ฒ์๊ธ์ ์ ๋ชฉ์ด ๋ชจ๋ฌ์ฐฝ์ ์ ๋ชฉ ๋ถ๋ถ์ผ๋ก ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ๋๋๋ก ์ฝ๋๋ฅผ ์์ ํด๋ณด์๋ค.
- ํ์ฌ Modal ํจ์์ ์ ๋ชฉ ๋ถ๋ถ์ props.title[0] ์ด ๋ค์ด๊ฐ๋๊น title ์ด๋ผ๋ state ์ 0๋ฒ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ ๋ชฉ์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ 1๋ฒ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ ๋ชฉ์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋๋ ค๋ฉด props.title[1], 2๋ฒ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ ๋ชฉ์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋๋ ค๋ฉด props.title[2] ๊ฐ ๋๋ฉด ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์ธ๋ฑ์ค๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด ์ด๋๊ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ์ ํฉํ ๊ฒ ๋ฐ๋ก ๊ฐ ๊ฒ์๊ธ ์ ๋ชฉ ๋ถ๋ถ์ด๋ฏ๋ก ๊ฐ ๊ฒ์๊ธ ์ ๋ชฉ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด์ค๋ค.
- ๊ฐ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ํด๋ฆญํ์ ๋ ๋ชจ๋ฌ์ฐฝ์ ์ ๋ชฉ ๋ถ๋ถ ์ธ๋ฑ์ค๋ฅผ ํด๋ฆญํ ๊ฒ์๊ธ์ ์ ๋ชฉ ๋ถ๋ถ์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด ํด๋ฆญํ ๊ฒ์๋ฌผ์ ์ ๋ชฉ์ผ๋ก ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋๋ ๊ฒ์ด๋ค.
let [clickedNum, setClickedNum] = useState(0);
- ์ธ๋ฑ์ค๋ฅผ ๋ฐ๊พผ๋ค๋ ๊ฒ์ ์ฆ, ์ธ๋ฑ์ค ๊ฐ์ ๋ณ๊ฒฝํ ํจ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ด๋ฏ๋ก ์์ ๊ฐ์ด useState() ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
{
title.map(function(content, idx){
return (
<div className='list'>
<h3 onClick={()=>{setClickedNum(idx)}}>{content}</h3>
<p>2022-03-18</p>
<hr/>
</div>
)
})
}
- ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ฒ์๋ฌผ ์ ๋ชฉ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด์ผํ๋๋ฐ, map() ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด ์ธ๋ฑ์ค์ ๊ฐ์ ์ญํ (๋ฐ๋ณต๋ฌธ์ด ๋๋ฉด์ 0,1,2.. ์ ๊ฐ์ด ํ๋์ฉ ์ฆ๊ฐํ๋ ์ ์๋ฅผ ์๋ฏธ)์ ํ๋ฏ๋ก ์ฐ์ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ idx ๋ผ๊ณ ์์ฑํด์ฃผ์๋ค.
- ๋ค์์ผ๋ก ๊ฒ์๊ธ ์ ๋ชฉ์ ํด๋ฆญํ์ ๋ clickedNum ์ด๋ผ๋ state ์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ idx ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ฏ๋ก onClick={ ()=>{ setClickedNum(idx) } } ๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
{modal === true ? <Modal title={title} clickedNum={clickedNum}/> : null}
- ์ด์ ๊ทธ๋ ๊ฒ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ํด๋ฆญํ ๋๋ง๋ค ๋ณ๊ฒฝ๋๋ clickedNum ์ Modal function ์ผ๋ก ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
- ๋ฐ๋ผ์ props ๋ฌธ๋ฒ์ ๋ฐ๋ผ <์์_Component์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ= {state_์ด๋ฆ} > ๋ผ๋ ์์์ ๋ง์ถ์ด ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐ๋ก ์์ฑํด์ฃผ์๋ค.
- ์์_Component : Modal
- ์ ์กํ _๋_์ฌ์ฉํ _์ด๋ฆ : clickedNum
- state_์ด๋ฆ : clickedNum
function Modal(props){
return (
<div className='modal'>
<h2>์ ๋ชฉ: {props.title[props.clickedNum]}</h2>
<p>๋ ์ง: 2022-03-18</p>
<p>์์ธ๋ด์ฉ</p>
</div>
)
}
- ๋ง์ง๋ง์ผ๋ก ๋ฐ์์จ props.clickedNum ์ props.title[] ์์ ์์ฑํด์ฃผ๋ฉด ์ ๋ง ๊ฒ์๋ฌผ์ ํด๋ฆญํ ๋๋ง๋ค ํด๋น ๊ฒ์๋ฌผ ์ ๋ชฉ์ ํด๋นํ๋ idx ๋ฅผ ๋ฐ์์ props.title[0], props.title[1], props.title[2] ... ์ด๋ฐ ์์ผ๋ก ์ ์ฉ๋์ด ๋ชจ๋ฌ์ฐฝ์ ์ ๋ชฉ ๋ถ๋ถ์ ์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ค ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ ์ฌ๋ถ ํ์ธํด๋ณด๊ธฐ
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ธ๋ก๊ทธ ๊ธ๋ฐํ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.22 |
---|---|
[React] ์ถ์ฒ ๋ฒํผ ๊ธฐ๋ฅ ์ค๋ฅ ์์ ํ๊ธฐ (0) | 2022.03.22 |
[React] React ์์ ๋ฐ๋ณต๋ฌธ ํ์ฉํ๊ธฐ (0) | 2022.03.21 |
[React] ํด๋ฆญํ๋ฉด ๋์ํ๋ UI (๋ชจ๋ฌ์ฐฝ) ๋ง๋ค์ด๋ณด๊ธฐ (0) | 2022.03.20 |
[React] React ์์ state ์ฌ์ฉํด๋ณด๊ธฐ_2 (0) | 2022.03.18 |