#3-0 ๋ค์ด๊ฐ๋ ๋ง
Header ์์ญ์ ์์
ํ๋ ์ค ๋ชจ๋ฌ์ฐฝ ๋ซ๊ธฐ ๋ถ๋ถ์์ ์ ์ ๋งํ์๋ค. ๋ชจ๋ฌ์ฐฝ ๋ซ๊ธฐ ๋ฒํผ์ด ๋ฐ๋ก ์๊ณ , ๋ชจ๋ฌ์ฐฝ ์์ญ ๋ฐ์ ํด๋ฆญํ์ ์ ๋ชจ๋ฌ์ฐฝ์ด ๋ซํ๋ ๊ตฌ์กฐ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ตฌํํ๊ธฐ ์ฌ์ด ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ ์๊ฐ๋ณด๋ค ์กฐ๊ธ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ๊ทธ๋๋ ํด๋ด์๋ค๋ ๊ฒ์ ๊ธฐ์จ์ ๋๊ผ๋ค.
#3-1 useRef ์ด์ฉํ๊ธฐ
ํน์ ํ Element๋ฅผ ์ ํํ๊ณ ์ถ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก getElementById๋ querySelector ๋ฑ์ ์ฌ์ฉํ๋ฏ์ด, ๋ฆฌ์กํธ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น? ์ ๋ต์ useRef Hook ํจ์ ์ฌ์ฉํ๊ธฐ!
๋ชจ๋ฌ์ฐฝ ์์ญ ๋ฐ์ ํด๋นํ๋ ๋ถ๋ถ์ useRef๋ฅผ ํตํด ์ ํํ ํ, ํด๋น Element๊ฐ ํด๋ฆญ ๋์์ ๋๋ง ๋ชจ๋ฌ์ฐฝ์ด ๋ซํ๋๋ก ์ด๋ฒคํธ๋ฅผ ์ฃผ๋ฉด ๋๋ค.
*์์ ์ฝ๋
import React, { useState, useRef } from 'react';
function Header(){
const [menuBtnClick, setMenuBtnClick] = useState(false);
const outSection = useRef();
return (
<>
<header>
...
<button type="button" onClick={()=>{setMenuBtnClick(true)}}>
๋ฉ๋ด๋ฒํผ
</button>
...
{
menuBtnClick === true
? (<div class="modal-outside" ref={outSection} onClick={(e)=>{
if(outSection.current === e.target) {
setMenuBtnClick(false)
}
}}>
<div class="modal-content"> ๋ชจ๋ฌ์ฐฝ ๋ด์ฉ</div>
<div>)
: null
}
</header>
</>
)
}
'[PROJECT] ๋ด์ผ์ ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#6. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ (1์ฐจ) (1) | 2021.10.04 |
---|---|
#5. ์ฝ๊ด๋์ ์ฒดํฌ๋ฐ์ค ๊ธฐ๋ฅ ๊ตฌํ (2) | 2021.09.27 |
#4. ์บ๋ก์ (Carousel) ๊ตฌํํ๊ธฐ (0) | 2021.09.25 |
#2. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ฐ๋ ์ก๊ธฐ (0) | 2021.09.13 |
#1. ์ฒซ ํ๋ก์ ํธ ์์๊ณผ ์ค๋น (0) | 2021.09.07 |