본문 바로가기
  • 사람은 무언가를 배울 필요가 있을때가 되서야 비로소 배우게 된다.
React

리액트-탭메뉴 구현하기

by YoHaYo 2023. 12. 18.
728x90
반응형
Tab 구현하기 - 클릭시 글나오게

 

저 짧은 삼항식이 핵심임 !

import React, { useState } from 'react'
import bd from './data/bd.json'
import './Tab.css'

function Tab() {
  const [tabnum, setTabnum] = useState(0);

  return (
  
    <>
      <section id='tabsection'>
        <div className='d-flex'>
          {
            bd.tab.map((value,idx) => {

              const colorvar = tabnum === idx ? "red" : null;

              return (
                <h3 
                key={`h3${idx}`} 
                style={{color: colorvar}} 
                data-check={`${idx}`}
                onClick={ () => {  setTabnum(idx)  }}
                >{value.tabtext}</h3>
              )
            })            
          }
        </div>
      </section>    
    </>
  )
}

export default Tab

 

직접 인라인스타일을 주기보단 data속성으로 css 조절하기.
import React, { useState } from 'react'
import bd from './data/bd.json'
import './Tab.css'

function Tab() {
  const [mystyle, setMystyle] = useState('off');

  return (
  
    <>
      <section id='tabsection'>
        <div className='d-flex'>
          {
            bd.tab.map((value,idx) => {

              const stylevar = mystyle === idx ? "on" : null;

              return (
                <h3 
                key={`h3${idx}`} 
                data-check={`${idx}`}
                data-cls={stylevar}
                onClick={ () => {  
                  setMystyle(idx)
                  }}
                
                >{value.tabtext}</h3>
              )
            })            
          }
        </div>
      </section>    
    </>
  )
}

export default Tab

 

탭 했을때 글내용도 나오게하기 - and 기법
  • A && B 문으로 참이면 B를 출력하는 것을 응용 하는 기법.
  • 이중map은 일중map에서 받은 value로 넘어받아서 접근하는거에 주의 !
import React, { useState } from 'react'
import bd from './data/bd.json'
import './Tab.css'

function Tab() {
  const [tabnum, setTabnum] = useState(0);

  return (
  
    <>
      <section id='tabsection'>
        <div className='d-flexxx'>
          {
            bd.tab.map((v,i) => {

              const colorvar = tabnum === i ? "red" : null;

              return (
                <>
                  <h3 
                key={`h3${i}`} 
                style={{color: colorvar}} 
                data-check={`${i}`}
                onClick={ () => {  setTabnum(i)  }}
                >{v.tabtext}</h3>

                 { tabnum === i && (
                    <ul>
                    {
                      v.tabul.map(( vv, ii )=>{
                      return (
                      <li key={`list${ii}`} >
                        <span>{vv.atext}</span>
                      </li>)
                      })
                    }
                </ul>)}
                </>
              )
            })            
          }          
        </div>
        

      </section>    
    </>
  )
}

export default Tab
반응형

'React' 카테고리의 다른 글

useMemo vs useCallback  (0) 2023.12.28
useRef - split로 데이터 띄어쓰기  (1) 2023.12.27
useRef - scroll이벤트처리!  (0) 2023.12.27
useEffect 란?  (1) 2023.12.21
컴포넌트란?  (0) 2023.12.18

댓글