몇번째 버튼을 눌렀는지 state로 저장하고, state에 따라 UI를 보이게했다가 안보이게 하면 됨.
그냥 <button>
태그로 만들어진 버튼이 아니라 부트스트랩을 이용하도록 하자
https://react-bootstrap.netlify.app/components/navs/#base-nav
1. 여기서 Tab 찾아서 button 자리에 코드 복붙
<Nav variant="tabs" defaultActiveKey="/home">
<Nav.Item>
<Nav.Link href="/home">Active</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="link-1">Option 2</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="disabled" disabled>
Disabled
</Nav.Link>
</Nav.Item>
</Nav>
그 뒤에
<Nav className="mt-5" variant="tabs" defaultActiveKey="link-0">
<Nav.Item>
<Nav.Link eventKey="link-0">Active</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="link-1">Option 2</Nav.Link>
</Nav.Item>
</Nav>
let[tab, setTab] = useState(0);
<Nav className="mt-5" variant="tabs" defaultActiveKey="link-0">
<Nav.Item>
<Nav.Link eventKey="link-0" onClick={()=>{ setTab(0) }}>Active</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="link-1" onClick={()=>{ setTab(1) }}>Option 2</Nav.Link>
</Nav.Item>
</Nav>
function TabContent(props){
if(props.tab===0){
return <div>0번째 내용입니다.</div>
}
if(props.tab===1){
return <div>1번째 내용입니다.</div>
}
}
<Nav className="mt-5" variant="tabs" defaultActiveKey="link-0">
<Nav.Item>
<Nav.Link eventKey="link-0" onClick={()=>{ setTab(0) }}>Active</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="link-1" onClick={()=>{ setTab(1) }}>Option 2</Nav.Link>
</Nav.Item>
</Nav>
<TabContent tab={tab}></TabContent>
미리 애니메이션 클래스를 제작한 다음, 컴포넌트 등장/업데이트될 때 클래스에 붙을 수 있도록 하면 된다. -귀찮으면 라이브러리 쓰기-
npm install react-transition-group
yarn add react-transition-group
숨쉬듯 import하기
import { CSSTransition } from 'react-transition-group';
<CSSTransition>
으로 애니메이션 필요한 곳 감싸고 in
, classNames
, timeout
설정 <CSSTransition in={true} classNames="wow" timeout={500}>
<TabContent tab={tab}></TabContent>
</CSSTransition>
in
: true일 때 애니메이션을 적용해줌
className
: 클래스명, 애니메이션 디자인에 활용
timeout
: 작동시간
.wow-enter{
//컴포넌트 등장 시작시 적용할 css
opacity:0;
}
.wow-enter-active{
//컴포넌트 등장 중일시 적용할 css
opacity:1;
transition: all 500ms; //0.5초안에 서서히 변하게 해주세요
let[tabSwitch, setTabSwitch] = useState(false);
useEffect
이용) <Nav className="mt-5" variant="tabs" defaultActiveKey="link-0">
<Nav.Item>
<Nav.Link eventKey="link-0" onClick={()=>{ setTabSwitch(false); setTab(0) }}>Active</Nav.Link>
</Nav.Item>
<Nav.Item>
<Nav.Link eventKey="link-1" onClick={()=>{ setTabSwitch(false); setTab(1) }}>Option 2</Nav.Link>
</Nav.Item>
</Nav>
function TabContent(props){
useEffect(()=>{
props.setTabSwitch(true); //tab 컴포넌트가 로드 될 때 true
})
if(props.tab===0){
return <div>0번째 내용입니다.</div>
}
if(props.tab===1){
return <div>1번째 내용입니다.</div>
}
}
👍완성!