728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
๐ Tab ๋ง๋ค๊ธฐ ์ ์ ์๊ฐํด๋ณด๊ธฐ
function Detail(){
return (
<div>
<button>์์ธ์ ๋ณด</button>
<button>๋ฆฌ๋ทฐ</button>
<button>Q&A</button>
<div>์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</div>
<div>๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</div>
<div>Q&A ๋ด์ฉ์
๋๋ค.</div>
</div>
)
}
- 3๊ฐ์ ํญ์ผ๋ก ๊ตฌ์ฑํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ํด๋ฆญํ ๋ฒํผ ํ๊ทธ 3๊ฐ์ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ๋ณด์ฌ์ค ๋ด์ฉ์ด ๋ค์ด๊ฐ div ํ๊ทธ๊ฐ 3๊ฐ ์๋ UI ๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
- ์ด์ ๊ฑฐ๊ธฐ์ ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ๋ฒํผ์ ๋ง๋ div ํ๊ทธ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด ๋๋ค.
- ๋ฐ๋ผ์, ๋ช ๋ฒ์งธ ๋ฒํผ์ ๋๋ ๋์ง state ๋ก ์ ์ฅํด๋๊ณ , state ์ ๋ฐ๋ผ ์๋ง์ div ๋ฐ์ค๋ฅผ ๋ณด์ด๋๋ก ํน์ ๋ณด์ด์ง ์๋๋ก ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค.
๐ Tab UI ๋์์ธํ๊ธฐ
- ๋น ๋ฅธ ๋์์ธ์ ์ํด์ React Bootstrap ์์ Tabs ๋ฅผ ๊ฒ์ํด์ ๋ง์์ ๋๋ ๋์์ธ์ ๋ณต์ฌํ์ฌ Detail.js ํ์ผ์ ๋ถ์ฌ๋ฃ๊ธฐํด์ฃผ์๋ค.
import {Nav} from 'react-bootstrap';
- React Bootstrap ์์ ์ํ๋ ๋์์ธ์ ๊ฐ์ ธ์ฌ ๋๋ ๊ฐ์ ธ์จ Component ๋ฅผ ๊ผญ import ํด์ฃผ์ด์ผ ํ๋ค.
<Nav className="mt-5" variant="tabs" defaultActiveKey="0">
<Nav.Item>
<Nav.Link eventKey="0">์์ธ์ ๋ณด</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="1">๋ฆฌ๋ทฐ</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="2">Q&A</Nav.Link>
</Nav.Item>
</Nav>
<div>์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</div>
<div>๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</div>
<div>Q&A ๋ด์ฉ์
๋๋ค.</div>
- ์ฐ์ , eventKey ๋ผ๋ ์์ฑ์ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ ์ ๋ ฅํ์ฌ ๊ฐ ํญ๋ค์ ๊ตฌ๋ณํด์ฃผ์๋ค.
- ๋ค์์ผ๋ก ๊ธฐ๋ณธ์ผ๋ก ํ์ฑํ๋ ํญ์ ์ ํ๋ ๋ถ๋ถ์ธ defaultActiveKey ๋ฅผ ์ ํด์ฃผ๋ฉด ๋๋๋ฐ ๋๋ ๋งจ ์ฒ์์ eventKey ๊ฐ 0 ์ธ ํญ์ ๋ณด์ฌ์ฃผ๋๋ก defaultActiveKey='0' ์ผ๋ก ์์ฑํ๋ค.
- ์ด์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ํ์ธํ๋ฉด ์์ ๊ฐ์ด ํญ UI ๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ Tab ๊ธฐ๋ฅ ๊ฐ๋ฐํ๊ธฐ
๐ค Tab UI ์ ์ํ๋ฅผ ์ ์ฅํ state ๋ง๋ค๊ธฐ
- ์ด์ ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋นํ๋ div ๋ฐ์ค๋ฅผ ๋ณด์ฌ์ค ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฒํผ์ ๋๋ ๋์ง ์ ์ฅํด์ค state ๊ฐ ํ์ํ๋ค.
- ์ฆ, ๋ฒํผ์ ๋๋ฅด๋ฉด state ๊ฐ 0, 1, 2 ์ด๋ฐ ์์ผ๋ก ๋ฐ๋์ด ์ ์ฅ๋๋ฉด ๋๋ ๊ฒ์ด๋ค.
let [clickedTab, setClickedTab] = useState(0);
- ๊ทธ๋์ clickedTab ์ด๋ผ๋ state ๋ฅผ ๋ง๋ค์ด์ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํด์ฃผ์๋ค.
๐ค onClick ์์ฑ์ผ๋ก ํด๋ฆญํ Tab ์ ๋ฒํธ๋ก state ๋ณ๊ฒฝํด์ฃผ๊ธฐ
<Nav className="mt-5" variant="tabs" defaultActiveKey="0">
<Nav.Item>
<Nav.Link eventKey="0" onClick={()=>{setClickedTab(0)}}>์์ธ์ ๋ณด</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="1" onClick={()=>{setClickedTab(1)}}>๋ฆฌ๋ทฐ</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="2" onClick={()=>{setClickedTab(2)}}>Q&A</Nav.Link>
</Nav.Item>
</Nav>
<div>์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</div>
<div>๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</div>
<div>Q&A ๋ด์ฉ์
๋๋ค.</div>
- ์ด์ ๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด setClickedTab() ํจ์๋ฅผ ์ด์ฉํด clickedTab ์ ์ ์ฅ๋ ๊ฐ์ ํด๋ฆญํ ๋ฒํผ์ ๋ฒํธ๋ก ๋ฐ๋๋๋ก ํด์ฃผ์๋ค.
- ์ฆ, 0๋ฒ ํญ์ ํด๋ฆญํ๋ฉด clickedTab ์ด๋ผ๋ state ๊ฐ 0 ์ด ๋๊ณ , 1๋ฒ ํญ์ ํด๋ฆญํ๋ฉด 1์ด ๋๋ ์์ด๋ค.
๐ค state ์ ์ ์ฅ๋ ๊ฐ์ ๋ง์ถฐ div ๋ฐ์ค ๋ณด์ฌ์ฃผ๊ธฐ
<Nav className="mt-5" variant="tabs" defaultActiveKey="0">
<Nav.Item>
<Nav.Link eventKey="0" onClick={()=>{setClickedTab(0)}}>์์ธ์ ๋ณด</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="1" onClick={()=>{setClickedTab(1)}}>๋ฆฌ๋ทฐ</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="2" onClick={()=>{setClickedTab(2)}}>Q&A</Nav.Link>
</Nav.Item>
</Nav>
<TabContent clickedTab={clickedTab}/>
- ์ด์ ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ ๋ clickedTab ์ ์ ์ฅ๋ ๊ฐ๊ณผ ์ผ์นํ๋ div ๋ฐ์ค๋ฅผ ๋ณด์ฌ์ฃผ์ด์ผ ํ๋ค.
- ์ฆ, clickedTab ์ด๋ผ๋ state ๊ฐ 0 ์ด ๋๋ฉด 0๋ฒ div ๋ฐ์ค๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , 1 ์ด ๋๋ฉด 1๋ฒ div ๋ฐ์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ด๋ค.
- ๋๋ ์ด๋ฅผ if ๋ฌธ์ผ๋ก ์์ฑํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก TabContent ๋ผ๋ Component ๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด Component ์๋ clickedTab ์ด๋ผ๋ state ๋ฅผ ์กฐ๊ฑด์์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก props ๋ฌธ๋ฒ์ ์ด์ฉํด clickedTab ์ด๋ผ๋ ๋ณ์๋ช ์ผ๋ก clickedTab ์ด๋ผ๋ state ๋ฅผ TabContent Component ๋ก ์ ์กํด์ฃผ์๋ค.
function TabContent(props) {
if (props.clickedTab === 0){
return (<TabContentTitle className="mt-5">์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 1) {
return (<TabContentTitle className="mt-5">๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 2) {
return (<TabContentTitle className="mt-5">Q&A ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
}
}
- ์ด์ TabContent ์์ clickedTab ์ด๋ผ๋ state ๋ฅผ props ๋ก ๋ฐ์์จ ํ, if ๋ฌธ์ ์์ฑํด์ฃผ์๋ค.
- if ๋ฌธ ๋ถ๋ถ์ ํด์์ด ์ด๋ ต์ง ์์ผ๋ ์ค๋ช ์ ์๋ต!
let TabContentTitle = styled.div`
font-size: 30px;
font-weight: bold;
background: #eee;
padding:200px 0;
`
- TabContent Component ๋ด์์ ์ฌ์ฉํ TabContentTitle ์ด๋ผ๋ Component ๊ฐ ๊ถ๊ธํ ์ ์๋๋ฐ, ์ด๋ styled-components ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ Component ์ ๋ฐ๋ก ์คํ์ผ์ ์
ํ ๊ฒ์ด๋ค.
(styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ถ๊ธํ๋ค๋ฉด ํด๋ฆญ!) - ์ฌ๊ธฐ๊น์ง๋ง ํด๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ถฉ์คํ ํญ์ด ์์ฑ๋๋ค.
๐ Tab ์ ์ ๋๋ฉ์ด์ ํจ๊ณผ ๋ฃ์ด๋ณด๊ธฐ
๐ค ์ ๋๋ฉ์ด์ ํจ๊ณผ ๋ฃ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- HTML, CSS ์์ฑํ ๋์ ๋์ผํ๊ฒ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋จผ์ ์ ๋๋ฉ์ด์ ์ ์ฃผ๋ class ๋ฅผ css ํ์ผ์ ์์ฑํ๋ค.
- Component ์์ฑ ๋ฐ ์ ๋ฐ์ดํธ๋ ๋ className ์ ๋ถ์ฌ์ค๋ค.
๐ค react-transition-group ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ
1. react-transition-group ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๊ธฐ
- react-transition-group ์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํจํด๋ง ์๋ฉด css ๋ฅผ ์ ํ์ฉํ์ง ๋ชปํ๋๋ผ๋ ๊ฐ๋จํ ์ ๋๋ฉ์ด์ ์ ๋ถ์ฌํ๊ธฐ ์ฝ๋ค.
// npm ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ
npm install react-transition-group
// yarn ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ
yarn add react-transition-group
- ์ผ๋จ ์ ์ฝ๋ ์ค ํ๋๋ฅผ ํฐ๋ฏธ๋์ ์ ๋ ฅํ์ฌ react-transition-group ์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ค๋ค.
import {CSSTransition} from 'react-transition-group';
- ์ค์น๊ฐ ์๋ฃ๋๋ฉด ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๊ณ ์ ํ๋ Component ๊ฐ ์๋ ํ์ผ ์๋จ์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์ฌ CSSTransition ์ import ํด์ค๋ค.
- react-transition-group ์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋จผ์ , <CSSTransition></CSSTransition> ์ผ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํ HTML ๋ค์ ๊ฐ์ธ์ค๋ค.
- ๊ทธ๋ฌ๊ณ ๋์ <CSSTransition> ์ in, classNames, timeout ์์ฑ์ ๋ฃ์ด์ค๋ค.
2. <CSSTransition></CSSTransition> ์ผ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํ HTML ๊ฐ์ธ์ฃผ๊ธฐ
<CSSTransition in={onOff} classNames="show" timeout={1000}>
<TabContent clickedTab={clickedTab}/>
</CSSTransition>
- ๋ฐ๋ผ์ ๋๋ TabContent Component ๋ฅผ <CSSTransition></CSSTransition> ์ผ๋ก ๊ฐ์ธ์ฃผ์๋ค.
- in ์ ์ค์์น์ ํด๋นํ๋ฉฐ true ์ผ ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํด์ค๋ค.
- classNames ๋ ์ด๋ค ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ ์ง ์ด๋ฆ์ ์ ํด์ฃผ๋ ๋ถ๋ถ์ด๋ค.
- timeout ์ ํด๋น ์ ๋๋ฉ์ด์ ํจ๊ณผ์ ์๋์๊ฐ์ ์๋ฏธํ๋ค.
3. CSS ํ์ผ์์ ์ ๋๋ฉ์ด์ ํจ๊ณผ ๋์์ธํ๊ธฐ
.show-enter {
opacity: 0;
}
.show-enter-active {
opacity: 1;
transition: all 1000ms;
}
- ์ด์ css ํ์ผ(ํน์ scss ํ์ผ)์์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ๋์์ธํด์ฃผ๋ฉด ๋๋ค.
- ๋์ ๊ฒฝ์ฐ classNames ๋ฅผ show ๋ผ๊ณ ์ ํด์ฃผ์๊ธฐ ๋๋ฌธ์ .show-enter, .show-enter-active ์ ๊ฐ์ด ํด๋์ค๋ช
์ ์์ฑํด์ค ํ css ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
- -enter ๊ฐ ๋ถ์ ๊ฒฝ์ฐ Component ์์ฑ๋ ๋ ์ ์ฉํ CSS ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
- -enter-active ๊ฐ ๋ถ์ ๊ฒฝ์ฐ Component ํ์ฑํ๋์ด์๋ ๋์ ์ ์ฉํ CSS ๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
- ๋๋ ํฌ๋ช ๋ ์์ฑ์ธ opacity ๋ฅผ 0์์ 1์ด ๋ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ์๋ค.
- transition ์์ฑ์ ํน์ ์์ฑ์ ํน์ ์๊ฐ๋์ ์์ํ ๋ณํ๋๋ก ๋์์ฃผ๋ ์์ฑ์ธ๋ฐ, ๋๋ ๋ชจ๋ ์์ฑ์ด 1์ด์ ์๊ฐ๋์ ๋ณํ๊ฒ ํด๋ฌ๋ผ๊ณ css ๋ฅผ ์์ฑํ๋ค.
4. ํ์์ in={false} ๋ก ํด๋์๋ค๊ฐ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ์ฉํด์ผ ํ ๋ true ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
// ์ ์ฒด ์ฝ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
// ์ฝ๋์ ๋ด์ฉ์ด ๋๋ฌด ๊ธธ์ด์ ๋ถํ์ํ ๋ถ๋ถ์ ์ ์ธํ๋ค.
function Detail(props) {
let [onOff, setOnOff] = useState(false);
return (
<div className="container">
<Nav className="mt-5" variant="tabs" defaultActiveKey="0">
<Nav.Item>
<Nav.Link eventKey="0" onClick={()=>{setOnOff(false); setClickedTab(0)}}>์์ธ์ ๋ณด</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="1" onClick={()=>{setOnOff(false); setClickedTab(1)}}>๋ฆฌ๋ทฐ</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="2" onClick={()=>{setOnOff(false); setClickedTab(2)}}>Q&A</Nav.Link>
</Nav.Item>
</Nav>
<CSSTransition in={onOff} classNames="show" timeout={1000}>
<TabContent clickedTab={clickedTab} setOnOff={setOnOff}/>
</CSSTransition>
</div>
)
}
function TabContent(props) {
useEffect(()=>{
props.setOnOff(true);
})
if (props.clickedTab === 0){
return (<TabContentTitle className="mt-5">์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 1) {
return (<TabContentTitle className="mt-5">๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 2) {
return (<TabContentTitle className="mt-5">Q&A ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
}
}
let [onOff, setOnOff] = useState(false);
- <CSSTransition> ์์ in ์์ฑ์ด ์ํฉ์ ๋ฐ๋ผ true / false ๋ก ๋ฐ๋์ด์ผ ํ๋ฏ๋ก onOff ๋ผ๋ state ๋ฅผ ํ๋ ๋ง๋ค์ด์ฃผ์๋ค.
<Nav className="mt-5" variant="tabs" defaultActiveKey="0">
<Nav.Item>
<Nav.Link eventKey="0" onClick={()=>{setOnOff(false); setClickedTab(0)}}>์์ธ์ ๋ณด</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="1" onClick={()=>{setOnOff(false); setClickedTab(1)}}>๋ฆฌ๋ทฐ</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="2" onClick={()=>{setOnOff(false); setClickedTab(2)}}>Q&A</Nav.Link>
</Nav.Item>
</Nav>
- ํน์ ํญ์ ํด๋ฆญํด์ ํด๋นํ๋ TabContent Component ๊ฐ ๋ก๋๋ ๋ onOff state ๋ฅผ true ๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ผ๋จ์ ๊ฐ ํญ์ ๋๋ฅด๋ฉด ๋ฌด์กฐ๊ฑด onOff ๋ผ๋ state ๊ฐ false ๊ฐ ๋๋๋ก ๋ง๋ค์ด์ฃผ์๋ค.
(Component ๋ก๋ ์ ์ ๋ชจ๋ ํญ์ ์ ๋ณด์ด๊ฒ ์ด๊ธฐํํ๋ ๊ณผ์ ์ฒ๋ผ ์๊ฐํ๋ฉด ๋ ๋ฏํ๋ค.)
<CSSTransition in={onOff} classNames="show" timeout={1000}>
<TabContent clickedTab={clickedTab} setOnOff={setOnOff}/>
</CSSTransition>
- TabContent Component ์์ setOnOff() ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ setOnOff ๋ผ๋ ๋ณ์๋ช ์ผ๋ก setOnOff state ๋ฅผ TabContent Component ๋ก ์ ์กํด์ฃผ์๋ค.
function TabContent(props) {
useEffect(()=>{
props.setOnOff(true);
})
if (props.clickedTab === 0){
return (<TabContentTitle className="mt-5">์์ธ์ ๋ณด ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 1) {
return (<TabContentTitle className="mt-5">๋ฆฌ๋ทฐ ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
} else if (props.clickedTab === 2) {
return (<TabContentTitle className="mt-5">Q&A ๋ด์ฉ์
๋๋ค.</TabContentTitle>)
}
}
- TabContent Component ๊ฐ ๋ก๋๋ ๋ onOff ์ state ๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด useEffect() ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๊ทธ๋์, setOnOff ๋ผ๋ state ๋ฅผ props ๋ก ๋ฐ์์ค ํ์ useEffect() ์์ props.setOnOff(true) ๋ผ๊ณ ์ฝ๋๋ฅผ ์์ฑํ์ฌ, TabContent Component ๊ฐ ๋ก๋๋ ๋ onOff ๊ฐ true ๊ฐ ๋๋๋ก ํด์ฃผ์๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] props ๋์ redux ์ฌ์ฉํด๋ณด๊ธฐ_2 (0) | 2022.03.28 |
---|---|
[React] props ๋์ redux ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2022.03.28 |
[React] props ๋์ Context API ์ฌ์ฉํด๋ณด๊ธฐ (1) | 2022.03.27 |
[React] ์์ธ ํ์ด์ง์ ์ฌ๊ณ ๋ฐ์ดํฐ ํ์ํ๊ธฐ (0) | 2022.03.26 |
[React] React ์์ Ajax ์์ฒญํ๊ธฐ_2 (1) | 2022.03.26 |