๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/React

[React] 15. React ๋ฉ”๋‰ดํƒญ ๋งŒ๋“ค๊ธฐ (ํด๋ฆญ ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ๋‚ด์šฉ ๋ณ€๊ฒฝ)

by KASSID 2024. 1. 13.

๋ชฉ์ฐจ

    728x90

    ์ด์ „ ๊ธ€ โ–ผ

    ๋”๋ณด๊ธฐ

    0. 2023.05.05 - [๐ŸŒŒ | WEB DEV/React] - [React] 0. React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  & ์ดˆ๊ธฐ ์„ธํŒ…

    1. 2023.05.07 - [๐ŸŒŒ | WEB DEV/React] - [React] 1. JSX

    2. 2023.05.26 - [๐ŸŒŒ | WEB DEV/React] - [React] 2. state (๋ณ€์ˆ˜, array, object)

    2-1. 2023.05.27 - [๐ŸŒŒ | WEB DEV/React] - [React] 2-1. array state ์ •๋ ฌํ•˜๊ธฐ ( .sort()ํ™œ์šฉ)

    3. 2023.05.28 - [๐ŸŒŒ | WEB DEV/React] - [React] 3. ์ปดํฌ๋„ŒํŠธ (Component)

    4. 2023.05.28 - [๐ŸŒŒ | WEB DEV/React] - [React] 4. ๋™์ ์ธ UI ์ œ์ž‘ํ•˜๊ธฐ

    5. 2023.05.28 - [๐ŸŒŒ | WEB DEV/React] - [React] 5. ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„ ์ถ•์•ฝํ•˜๊ธฐ (map)

    6. 2023.05.29 - [๐ŸŒŒ | WEB DEV/React] - [React] 6. props

    7. 2023.07.03 - [๐ŸŒŒ | WEB DEV/React] - [React] 7. ์ด๋ฏธ์ง€ ์‚ฝ์ž…ํ•˜๊ธฐ(css, html, publicํด๋”์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ)

    8. 2023.07.06 - [๐ŸŒŒ | WEB DEV/React] - [React] 8. ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

    9. 2023.07.09 - [๐ŸŒŒ | WEB DEV/React] - [React] 9. ๋ผ์šฐํŒ…-1 (react-router-dom์„ธํŒ…, Routes, Route, Link)

    10. 2023.07.10 - [๐ŸŒŒ | WEB DEV/React] - [React] ๋ผ์šฐํŒ…-2 (useNavigate, 404page, Nested Routes, Outlet)

    11. 2023.10.03 - [๐ŸŒŒ | WEB DEV/React] - [React] 11. ๋ผ์šฐํŒ…-3 ์–‘์‚ฐํ˜• ๋ผ์šฐํŒ…

    12. 2023.10.04 - [๐ŸŒŒ | WEB DEV/React] - [React] 12. Styled-components (+ ํ•œ ์ปดํฌ๋„ŒํŠธ์— cssํŒŒ์ผ ์ ์šฉ๋ฒ•)

    13. 2024.01.02 - [๐ŸŒŒ | WEB DEV/React] - [React] 13. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ Lifecycle์™€ useEffect

    14. 2024.01.12 - [๐ŸŒŒ | WEB DEV/React] - [React] 14. React์™€ ์„œ๋ฒ„ ์—ฐ๋™ํ•˜๊ธฐ (ajax๋ฅผ ์ด์šฉํ•ด! (get, post) )

     

    React์—์„œ ๋ฉ”๋‰ด ํƒญ์„ ์ œ์ž‘ํ•ด๋ณด์ž!

     

    1. ๋™์ ์ธ UI ์ œ์ž‘์„ ์œ„ํ•œ 3step

     

    ๋™์ ์ธ UI๋ฅผ ์ œ์ž‘ ๊ณผ์ •์„ ์š”์•ฝํ•˜๋ฉด 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

     

    [์ œ์ž‘ 3step]
    1) Html, css๋กœ UI ์ œ์ž‘

    2) UI์˜ ํ˜„ ์ƒํƒœ๋ฅผ ๋‹ด์„ state ์ƒ์„ฑ
    3) state ๋ณ€ํ™”์— ๋”ฐ๋ฅธ UI ๋ณ€๊ฒฝ

     

     

    ์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

    ๋ฉ”๋‰ด ๋ฒ„ํŠผ์ด ์žˆ๊ณ , ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

    ์ถœ์ฒ˜ : ๋ฌด์‹ ์‚ฌ

     

     


    2. ์ œ์ž‘ ๋ฐฉ๋ฒ•

     

    1) html, css๋กœ UI ์ œ์ž‘

    ๊ฐ๊ฐ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ œ์ž‘ํ•ด์„œ importํ•˜์˜€๋‹ค.

     

     

    2) state ์ƒ์„ฑ

    // ํด๋ฆญํ•œ ํƒญ ์ธ๋ฑ์Šค
    const [tabIdx, setTabIdx] = useState(0)
    
    // ํด๋ฆญ ์ด๋ฒคํŠธ ํ•จ์ˆ˜
    const tabClick = (idx)=>{
      if(tabIdx !== idx){
        tabBtnRef.current[tabIdx].classList.remove("selected");
        tabBtnRef.current[idx].classList += " selected";
        setTabIdx(idx);
      }
    }

     

     

    3) state ๋ณ€ํ™”์— ๋”ฐ๋ฅธ UI ๋ณ€๊ฒฝ

    ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์œ„์น˜์‹œํ‚จ๋‹ค.

    RenderTab์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ œ์ž‘ํ•˜์˜€๊ณ 

    idx๋ผ๋Š” props์— ์œ„์—์„œ ์ œ์ž‘ํ•œ tabIdx state๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.

    function App(){
      ...
      
      return(
    	...
        {
          <RenderTab idx={tabIdx} />
        }
      )
    }

     

    - ์ œ์–ด๋ฌธ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

    const RenderTab = (props)=>{
      switch (props.idx) {
        case 0:
          return <Tab1/>;
          break;
        case 1:
          return(<Tab2/>)
          break;
        case 2:
          return(<Tab3/>)
          break;
        
        default:
          return(<Tab1/>)
          break;
      }    
    }

     

     

    - if ๋ฌธ ์—†์ด ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

    if๋ฌธ ์—†์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

    ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆซ์ž์ธ props์™€ Array ์ž๋ฃŒํ˜•์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

    function RenderTab(props){
      return [ <Tab1/>,  <Tab2/>,  <Tab3/> ][props.idx]
    }

     

     

    - props.~~ ์—†์ด ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

    props.~~ ๋ฅผ ๋”์šฑ ํ•จ์ถ•ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š”

    ์•„๋ž˜์ฒ˜๋Ÿผ {props๋ช…}์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

    function RenderTab({idx}){
      return [ <Tab1/>,  <Tab2/>,  <Tab3/> ][idx]
    }

     

    ๋Œ“๊ธ€