[1st project] TabomGalagsin #01 ๐ฉด
Havaianas clone coding
Photo by Pasqualino Capobianco on Unsplash
1st day of the project
์ฐ๋ฆฌ๊ฐ ํด๋ก ํ website!! : https://havaianas.com.br/
์ด๊ธฐ์ธํ git clone ๋ฐ๊ธฐ!
- ์ค์ ์ ์ด์ ํ์๋ค๊ณผ ์งํํ ์ด๊ธฐ์ธํ ํ main์ github์ ํตํด clone๋ฐ๊ณ ๋ด๊ฐ ๋งก์ ๋ถ์ผ์ธ navbar ๊ตฌํ์ ์งํํ๋ค.
Sprint standup meeting
- ํ์๋ค๊ณผ ์ฒซ standup meeting์ ์งํํ๋ค. ๋ฐฑ์๋, ํ๋ก ํธ์๋ ์ด์ ํ ์ผ, ์ค๋ํ ์ผ ๊ทธ๋ฆฌ๊ณ blocker์ ๊ณต์ ํ์๋ค. ๋๋ navbar์ ์ถ๊ฐํ ์ฐ๋ฆฌํ ๋ก๊ณ ๋ฅผ ๋ง๋ค์ด ๋ณด์ฌ์ฃผ์๋ค. ๋คํํ ๋ง์์ ๋ค์ดํ์ ์ ๋ก๊ณ ๋ก ์ถ๊ฐํ๊ธฐ๋ฌ ํ๋ค.
Navbar ๊ตฌํ ์์!
- ์ผ๋จ cloneํ website๋ฅผ ๋ณด๋ฉฐ ๊ตฌ์กฐ๋ฅผ ์ก์๋ค. ์๋จ๋ฉ๋ด๊ฐ ์ฌ๋ฌ๊ฐ์ง์๋๋ฐ ๊ทธ ์ค ์นดํ ๊ณ ๋ฆฌ๋ถ๋ถ๋ง ์ผ๋จ ํด๋ก ํ๊ฒ ๋์ด ์๋จ ๋ฉ๋ด๋ฐ์ ๊ตฌ์กฐ๋ฅผ ์ด์ง ์์ ํ๋ค. Navbar์ 2๊ฐ๋ก ๋๋์๊ณ (๋ฉ๋ด๋ฐ ์์ carousel ๊ด๊ณ ๊ธฐ๋ฅ์ ์ํด) flex๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์ด์ฝ๊ณผ ๋ก๊ณ ์ position์ ์ก์์ฃผ์๊ณ navbar๋ 2๊ฐ๋ก ๋๋์๋ค.
- ์ฒ์์ ๊ณต์์น์ฌ์ดํธ์ ๋ฉ์ธ colour์ ๋ฃ์์ง๋ง ํ๋ฉด์ด ๋ฐ๋ ๋๋ง๋ค ๋ฐฐ๊ฒฝํ๋ฉด๊ณผ nav bar๋ ๊ฐ์ด ๋ฐ๋๋๊ฑธ ๋ณด๊ณ
background: none
์ผ๋ก ์์ , ๊ทธ๋ฆฌ๊ณbox-shadow: 0px 8px 15px rgb(0 0 0 / 10%)
๋ฃ์ด์ฃผ์ด ๋ฉ์ธ ๋ฐฐ๊ฒฝ์๊ณผ ๊ตฌ๋ถ์ด ๊ฐ๋๋ก ํ ๊ฒ์ ํด๋ก ํ์๋ค. - CSS hover๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ๋ฉ๋ด๋ฅผ ๋ง์ฐ์ค๋ก hoverํ์ ๋ dropdown ๋ฉ๋ด๊ฐ ๋จ๊ฒ ํ๊ณ ์ถ์๋๋ฐ ์๋ฌด๋๋ ์์ด์ฝ๊ณผ nesting์ด ๋์ง ์์
<div>
์ฌ์ ์ ์ฉ์ด ๋์ง ์์๋ค. ์ด๋ป๊ฒ ํ๋ฉด dropdown ๋ฉ๋ด๊ฐ ๋ฐ ์ ์์์ง ๊ณ ๋ฏผ ํด ๋ณด์๋ค. ์์ ๋ฐฐ์ด useState๋ฅผ ์ฌ์ฉํด์ ์ด๊ธฐ๊ฐ์ false๋ก ์ค์ ํ๊ณ addEventListener onMouseOver(๋๋ onMouseEnter)์ ์ฌ์ฉํ์ฌ ๋ง์ฐ์ค๋ฅผ ๊ฐ๋ค ๋์ ๋, ๋ฉ๋ด dropdown๋ฉ๋ด๊ฐ navbarํ๋จ์ ์๊ธฐ๊ฒ ํ๊ณ onMouseLeave์ ์จ์ ๋ง์ฐ์ค๊ฐ dropdown๋ฉ๋ด์ ์์ด์ฝ์ ๋ฒ์ด๋๋ฉด ๋ค์ ๊ทธ ๋ฉ๋ด๊ฐ ์ฌ๋ผ์ง๊ฒ ๋ง๋ค ์ ์์๋ค! ํ์ง๋ง ์ฌ๊ธฐ์ ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ๊ฐ์๊ธฐ๋ฅ์ ํ๋ ์ด useState๋ฅผ child component์๋ ์ฌ์ฉํ๊ณ ์ถ์๋๋ฐ ๊ทธ๋ ๊ฒ ๋๋ true์ false๊ฐ ์์ฌ๋ฒ๋ ค ๋ ๋๋ง์ด ์๋๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. - ๊ฐ์ ํ์๋ถ๊ป SOS๋ฅผ ์์ฒญํ๋๋ ๊ฐ์ปดํฌ๋ํธ๋ณ๋ก useState๋ฅผ ๋ฐ๋ก ์ค์ ์์ด์ง ์๊ฒ ํด์ผํ๋ค๊ณ ํ์ จ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ์์ ํด์ฃผ์ จ๋๋ฐ ํจ์ฌ ์ฝ๋๊ฐ ์งง์์ก๊ณ ์ ๊ธฐ๋ฅ๋ ๊ตฌํ์ด ๋์๋ค.
import React, { useState } from 'react';
import DropdownContent from './DropdownContent/DropdownContent';
import './Dropdown.scss';
function Dropdown({ onMouseLeave }) {
const [menuMouseEnter, setMenuMouseEnter] = useState('Categories'); // true false ๋์ ๋ฉ๋ด ์ด๋ฆ ์ฌ์ฉ
return (
<div className="Dropdown" onMouseLeave={onMouseLeave}> // ๋ง์ฐ์ค๊ฐ div๋ฅผ ๋ ๋ฌ์ ๋ ๋๋กญ๋ค์ด์ ์์ ๋ผ
<div className="dropdownMenu">
<div className="dropdownCategory">
<ul>
<li
className="arrow"
onMouseOver={() => {
setMenuMouseEnter('Categories'); // arrow function์ผ๋ก ๋ณ์๋ฅผ ์์
}}
> // ์นดํ
๊ณ ๋ฆฌ๋ฅผ hoverํ์ ๋, ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ํ๋๊ฒ
Categories <i className="fa-solid fa-angle-right arrow" />
</li>
<li
className="arrow"
onMouseOver={() => {
setMenuMouseEnter('Colour');
}}
> // colour๋ฅผ hover ํ์ ๋, colour๊ฐ ๋ํ๋๊ฒ
Colour <i className="fa-solid fa-angle-right arrow" />
</li>
</ul>
</div>
<DropdownContent title={menuMouseEnter} /> // ์ด ์ปดํฌ๋ํธ ์์ ์๋ ํ์ดํ ๋ณ๋ก ๋ด์ฉ ๋ณ๊ฒฝ
</div>
</div>
);
}
export default Dropdown;
<DropdownContent>
๋ ์ฌ์ฌ์ฉํ์๋ค. โ ๊ฐ์ format ์์ ๋ค๋ฅธ ๋ด์ฉ
My thoughts
ย