공부방

탭 UI 본문

React

탭 UI

코딩 화이팅 2024. 11. 28. 15:05

동적인 UI 만들기

  1. html css로 디자인 미리 완성
  2. UI의 현재 상태를 저장할 state 하나 만들기
  3. state에 따라서 UI가 어떻게 보일지 작성

1. html css로 탭 디자인 미리 완성

<Nav variant="tabs"  defaultActiveKey="link0">
    <Nav.Item>
      <Nav.Link eventKey="link0">버튼0</Nav.Link>
    </Nav.Item>
    <Nav.Item>
      <Nav.Link eventKey="link1">버튼1</Nav.Link>
    </Nav.Item>
    <Nav.Item>
      <Nav.Link eventKey="link2">버튼2</Nav.Link>
    </Nav.Item>
</Nav>
<div>내용0</div>
<div>내용1</div>
<div>내용2</div>
  • react-bootstrap 사이트에서 tap 사용
  • eventKey 속성은 버튼마다 맘대로 작명
  • defaultActiveKey는 페이지 로드 시 어떤 버튼에 눌린 효과를 줄지 결정하는 부분

2. UI의 현재 상태를 저장할 state 하나 만들기

function Detail(){
  let [탭, 탭변경] = useState(0)
  (생략)
}
  • state 하나 만들기
  • 탭 UI의 상태는 0번 내용이 보이거나, 1번 내용이 보이거나 2번 내용이 보이도록 하기
  • 셋 중 하나이기 때문에 0, 1, 2 숫자로 상태를 표현

3. state에 따라서 UI가 어떻게 보일지 작성

function Detail(){
  let [탭, 탭변경] = useState(0)
  
  return (
    <TabContent 탭={탭}/>
  )
}

function TabContent(props){
  if (props.탭 === 0){
    return <div>내용0</div>
  }
  if (props.탭 === 1){
    return <div>내용1</div>
  }
  if (props.탭 === 2){
    return <div>내용2</div>
  }
}
  • state의 번호에 따라 몇번 내용 보이도록 코드 작성
  • 삼항연산자 대신 컴포넌트 만들어서 코드 작성
  • 탭이라는 state는 밑의 컴포넌트에 없기 때문에 부모에 있던 state를 자식이 쓰기 위해 props로 보내기
<Nav variant="tabs"  defaultActiveKey="link0">
    <Nav.Item>
      <Nav.Link onClick={()=>{ 탭변경(0) }} eventKey="link0">버튼0</Nav.Link>
    </Nav.Item>
    <Nav.Item>
      <Nav.Link onClick={()=>{ 탭변경(1) }} eventKey="link1">버튼1</Nav.Link>
    </Nav.Item>
    <Nav.Item>
      <Nav.Link onClick={()=>{ 탭변경(2) }} eventKey="link2">버튼2</Nav.Link>
    </Nav.Item>
</Nav>
  • 이렇게 코드를 작성한다면 그 숫자에 맞는 버튼에 내용이 나온다.

Tip

function TabContent(props){
  return [ <div>내용0</div>, <div>내용1</div>, <div>내용2</div> ][props.탭]
}
  • 이렇게 작성하여 props.탭이 0이면 긴 array 자료에서 0번 자료를 꺼내줄 것이다.
function TabContent({탭}){
  return [ <div>내용0</div>, <div>내용1</div>, <div>내용2</div> ][탭]
}
  • 자식 컴포넌트에서 props라고 파라미터를 하나만 작명하는게 아니라 원래는 props라고 적혀 있어야할 파라미터 자리에 {state1이름} 이렇게 작성하면 props.state1이름 이렇게 쓸 필요가 없어진다.
  • {state1이름, state2이름} 이런식으로 여러개의 props를 받아올수도 있다.

'React' 카테고리의 다른 글

Context API  (1) 2024.12.06
transition으로 애니메이션 주기  (1) 2024.11.29
ajax - axios  (0) 2024.11.26
LifeCycle / useEffect  (0) 2024.11.25
styled-component  (0) 2024.11.25