[React] ๋ฌธ์ œํ•ด๊ฒฐ: e.target์˜ className ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ => classList์ธ๋ฑ์Šค๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ or ๊ทธ๋ƒฅ id์“ฐ๊ธฐ (+DOMTokenList)

2024. 2. 9. 12:36ยท๐Ÿชด React
SMALL

240209 

 

๋‰ด์Šคํ”ผ๋“œ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ

ํ˜„์žฌ header์˜ nav์—์„œ ์„ ํƒ๋œ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋งž์ถฐ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์„ ๋œจ๊ฒŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

์•„์ง ์—‰์„ฑํ•œ ์ดˆ์•ˆ ใ… ใ…  ์•„๋ž˜๋Š” ์ด๋ฆ„์ด ๋‚˜์™€์„œ ์ž˜๋ž ..๋”ฐ. ์—ฌํŠผ ํŒ์„ ๋ˆ„๋ฅด๋ฉด ํŒ ์Œ์•…์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด, ํด๋ž˜์‹/์žฌ์ฆˆ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์Œ์•… ํ•ญ๋ชฉ์ด ๋œจ๊ฒŒ ํ•˜๋Š” ๊ฒƒ!

 

์ด์ „์— ๋ฐฐ์› ๋˜ ๊ธฐ๋Šฅ์ด๋ผ ์ž˜ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์•„์ง redux๋„ ์ต์ˆ™์น˜์•Š์ง€๋งŒ ๋ฐฐ์› ๋˜ ๋Œ€๋กœ ์“ฐ๋‹ˆ ์ž˜ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ !!

 

๋‚˜๋Š” ์„ ํƒ๋œ ํ•ด๋‹น ํƒœ๊ทธ (์—ฌ๊ธฐ์„œ Tab) ์˜ textContent (ํƒœ๊ทธ์‚ฌ์ด ํ…์ŠคํŠธ) ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธธ ์›์น˜์•Š์•˜๊ณ  

(๋ฐฐ์šด ๋‚ด์šฉ์—์„œ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋ฉด, ํด๋ฆญ์ด๋ฒคํŠธ๋กœ - event.target.textContent๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์‹์ด์—ˆ๋‹ค) 

 

์„ ํƒ๋œ ํƒœ๊ทธ์˜ className์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์—ˆ๋‹ค.

const Header = () => {
    const activeCategory = useSelector((state) => state.category);
    const dispatch = useDispatch();

    const onActiveCategory = (e) => {
        if (e.target === e.target.currentTarget) return;
        // console.dir(e.target); // ํ™•์ธํ•ด๋ณด๋‹ˆ e.target์˜ className์ด className: "sc-dQmiwx fhIQdM ํŒ"
        dispatch(setCategory(e.target.className));
        //console.log(activeCategory);
    };

    return (
        <HeaderWrapper>
            <div>
                <img src={logoImg} width={300} alt="logo" />
            </div>
            <MainNav>
                <TabsWrapper onClick={onActiveCategory}>
                    <Tab className="ํŒ" $isActive={activeCategory}>
                        ํŒ
                    </Tab>
                    <Tab className="ํด๋ž˜์‹๋ฐ์žฌ์ฆˆ" $isActive={activeCategory}>
                        ํด๋ž˜์‹ / ์žฌ์ฆˆ
                    </Tab>
                </TabsWrapper>

 

๊ทธ๋ž˜์„œ e.target.className์„ ์ผ์œผ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์„ ํƒ๋œ ๋Œ€๋กœ ๊ธฐ๋Šฅ์ด ๋˜์ง€ ์•Š์•„ ์ฝ˜์†”๋กœ ํ™•์ธํ•ด๋ณด๋‹ˆ

ํŒ ์ด๋ผ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํƒํ–ˆ์„ ๋•Œ e.target.className์ด , ๋‚ด๊ฐ€ ๋ถ€์—ฌํ•œ className="ํŒ" ์ด ์•„๋‹ˆ๋ผ,

className: "sc-dQmiwx fhIQdM ํŒ"

์ด๋Ÿฐ ์ด์ƒํ•œ ๋ฌธ์ž์—ด?! ๋กœ ๋œจ๋Š” ๊ฒƒ์ด์—ˆ๋‹ท..!!

 

e.target ์„ ์ฝ˜์†”๋กœ ํ™•์ธํ•ด๋ณด์•˜๋‹ค. 

(์ฐธ๊ณ ๋กœ ์—ฌ๊ธฐ์„œ console.log๋กœ ๊ทธ๋ƒฅ ํ™•์ธํ•˜๋ฉด ํ•ด๋‹น <li> ํƒœ๊ทธ - HTML ํƒœ๊ทธ body ๋‚ด์šฉ๋งŒ ๋œฌ๋‹ค.

DOM JS ๊ฐ์ฒด์˜ ์ „์ฒด ํ‘œํ˜„์„ ๋ณด๋ ค๊ณ  ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค๋Š”, console.dir ๋ฅผ ์จ์•ผ ์›ํ•˜๋Š” ๊ฐ์ฒด ๋‚ด์šฉ์„ ๋‹ค ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค)

 

 

e.target ๊ฐ์ฒด ์•ˆ์—๋Š”, ์ž์„ธํžˆ ๋ณด๋‹ˆ classList ํ‚ค ์•ˆ์— .. ์ž˜์€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์—ฌํŠผ DOMTokenList์— 3๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฑฐ ๊ฐ™์•˜๋‹ค. ๋‚ด๊ฐ€ ๋ถ€์—ฌํ•œ ํด๋ž˜์Šค๋„ค์ž„์€ ์ธ๋ฑ์Šค 2๋ฒˆ ์š”์†Œ์ธ ๋“ฏ ํ–ˆ๋‹ค ! 

(๋”ํ† ํฐ๋ฆฌ์ŠคํŠธ๋Š”.. ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ํ† ํฐ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด ์ง‘ํ•ฉ์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์œ ์‚ฌ๋ฐฐ์—ด ์ธํ„ฐํŽ˜์ด์Šค - .. ๋ผ๋Š”๋ฐ ์—ฌํŠผ ๊ทธ๋Ÿฐ ํ† ํฐ ์ง‘ํ•ฉ .. ์—ฌํŠผ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค . ๋‹ด์— ์ž์„ธํžˆ ์•Œ์•„๋ณด๋Š”๊ฑธ๋กœ..) 

 

console.dir(e.target.classList) ๋กœ ํ™•์ธํ•ด๋ณด๋‹ˆ ์œ„ ๋‚ด์šฉ DOMTokenList(3) [ ....   ] ์ด ๊ทธ๋Œ€๋กœ ๋–ด๊ณ 

console.log(e.target.classList[2]) ๋กœ ํ™•์ธํ•˜๋‹ˆ ์ •๋ง๋กœ

 

๋‚ด๊ฐ€ ์›ํ•˜๋Š”, ํด๋ž˜์Šค๋„ค์ž„์ด ๊ทธ๋Œ€๋กœ ๋–ด๋‹ค !

 

 

 const onActiveCategory = (e) => {
        if (e.target === e.target.currentTarget) return;
        console.log(e.target.classList[2]);
        dispatch(setCategory(e.target.classList[2]));
    };

    return (
        <HeaderWrapper>
            <div>
                <img src={logoImg} width={300} alt="logo" />
            </div>
            <MainNav>
                <TabsWrapper onClick={onActiveCategory}>
                    <Tab className="ํŒ" $isActive={activeCategory}>
                        ํŒ
                    </Tab>
                    <Tab className="ํด๋ž˜์‹๋ฐ์žฌ์ฆˆ" $isActive={activeCategory}>
                        ํด๋ž˜์‹ / ์žฌ์ฆˆ
                    </Tab>
                </TabsWrapper>

 

๊ทธ๋ž˜์„œ ์œ„์™€๊ฐ™์ด, classList[2] ๋กœ ๊ฐ€์ ธ์™€์ฃผ๋‹ˆ  ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ์‹œ ํ•ญ๋ชฉ์ด ์ž˜ ๋–ด๋‹ค  *ใ…‡*  ํŽธ์•ˆ ,.. ๐Ÿ˜ญ

 

 

 

ํ•˜์ง€๋งŒ ๊ตณ์ด ์ €๋ ‡๊ฒŒ ํ•ด์•ผํ•˜๋‚˜ (?) ํ•ด์„œ ๊ทธ๋ƒฅ  id ๋ฅผ ๋ถ€์—ฌํ•ด์„œ ํ•ด์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค ใ…Žใ…Ž..

ํƒœ๊ทธ์— id ๋ถ€์—ฌํ•˜๊ณ ,  e.target.id ํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๊ทธ๋ƒฅ ๊น”๋” !! ํ•˜๋‹ค ใ…Žใ…Ž

 

SMALL

'๐Ÿชด React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] json-server์˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐ”๋€ sort-order ๋ฐฉ์‹ ํŽ˜์ด์ง€๋„ค์ด์…˜ ์š”์ฒญ ( - ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ)  (0) 2024.02.23
[React] ๊ฐœ์ธํ”„์  ์—๋Ÿฌ : VITE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์ฃผ์˜ & ๋ฆฌ๋•์Šค ๋ชจ๋“ˆ์—์„œ state๋กœ ์œ„์น˜ ์ž˜ ์“ฐ๊ธฐ  (0) 2024.02.22
[React/Vite] ์—๋Ÿฌํ•ด๊ฒฐ: Vite ํ”„๋กœ์ ํŠธ .env ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” process.env => import.meta.env๋กœ ์จ์ฃผ๊ธฐ  (0) 2024.02.21
[React] ๋น„๋™๊ธฐ ํ†ต์‹  - axios  (0) 2024.02.20
[React] ๋น„๋™๊ธฐ ํ†ต์‹  - fetch (+ axios์— ๋น„ํ•ด ๋ถˆํŽธํ•œ ์ )  (0) 2024.02.19
'๐Ÿชด React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [React] ๊ฐœ์ธํ”„์  ์—๋Ÿฌ : VITE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์ฃผ์˜ & ๋ฆฌ๋•์Šค ๋ชจ๋“ˆ์—์„œ state๋กœ ์œ„์น˜ ์ž˜ ์“ฐ๊ธฐ
  • [React/Vite] ์—๋Ÿฌํ•ด๊ฒฐ: Vite ํ”„๋กœ์ ํŠธ .env ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” process.env => import.meta.env๋กœ ์จ์ฃผ๊ธฐ
  • [React] ๋น„๋™๊ธฐ ํ†ต์‹  - axios
  • [React] ๋น„๋™๊ธฐ ํ†ต์‹  - fetch (+ axios์— ๋น„ํ•ด ๋ถˆํŽธํ•œ ์ )
๋ จ๋””
๋ จ๋””
FE - ๊ฐœ๋ฐœ ๊ณต๋ถ€์˜ ๊ธฐ๋ก
  • ๋ จ๋””
    Ryeon's Devstory
    ๋ จ๋””
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (69)
      • ๐Ÿชด JavaScript & TypeScript (11)
        • ๐Ÿงฉ Algorithm (6)
      • ๐Ÿชด React (12)
      • ๐Ÿชด Next.js (8)
      • ๐Ÿชด HTML & CSS (2)
      • ๐Ÿชด DB & BaaS (5)
      • ๐Ÿชด Git &Github (0)
      • โœ๏ธ ํ”„๋กœ์ ํŠธ ๊ณผ์ • & ํšŒ๊ณ  (18)
      • โœ๏ธ Today what I Learned _T.. (11)
      • ๐Ÿ•Š๏ธ IT ์•„ํ‹ฐํด (0)
      • etc. (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • My Github ๐Ÿ˜บ
    • ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ๐ŸŽต๐ŸŽง (์ผ์ƒ,์Œ์•… ๋“ฑ)
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    reacthook
    tailwind
    route handler
    reactquery
    useMutation
    ์—๋Ÿฌ
    ํ‹ฐ์Šคํ† ๋ฆฌ๋ธ”๋กœ๊ทธ์Šคํ‚จ
    NVM
    ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ
    Supabase
    ๋ฆฌ์•กํŠธ์ฟผ๋ฆฌ
    axios
    ์˜์กด์„ฑ๋ฐฐ์—ด
    ๋ Œ๋”๋งํŒจํ„ด
    ์˜ค๋ธ”์™„
    Next.js
    State
    ๋น„๋™๊ธฐํ†ต์‹ 
    Array.filter
    ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    props
    react
    BAAS
    useEffect
    Vite
    ์ปดํฌ๋„ŒํŠธ๋ถ„๋ฆฌ
    ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ
    fetch
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    json-server
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
๋ จ๋””
[React] ๋ฌธ์ œํ•ด๊ฒฐ: e.target์˜ className ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ => classList์ธ๋ฑ์Šค๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ or ๊ทธ๋ƒฅ id์“ฐ๊ธฐ (+DOMTokenList)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”