react์์ ๋๋กญ๋ฐ์ค ๋ฒํผ ๋ง๋ค๊ธฐ
์ด์ฉ๋ค ํ๊ฒ ๋์๋๋ฉด,
์ต๊ทผ ํ๊ต์์ ๋ฐฉํ ์ค ์งํํ๋ ์น ์๋น์ค ์บ ํ์ ์ฐธ์ฌํ๊ณ ์๋ค.
๊ฐ๋ฐ ์ธ์ด, ํด ๋ฑ์ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๊ธฐ์ ๋๋ ํ๋ก ํธ๋ ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํ๊ฒ ๋ค ๊ฒฐ์ ํ์๋ค.
ํ์ฌ ์ง์ ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ์ฌ ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ค์ ์๋ ์๋น์ค๋ฅผ ํด๋ก ํ ์๋ ์๋ค.
๋์๋ฆฌ๋ฅผ ํตํด ๊ธฐํ์ ๊ณผ์ ์ด ์ผ๋ง๋ ์ด๋ ต๊ณ ํ๋ ์ง๋ฅผ ์๊ณ ์์๊ธฐ์ ๋๋ ํด๋ก ์ฝ๋ฉ์ ์ ํํ์๋ค.
์ด๋ฒ ์บ ํ์์์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์น ์๋น์ค๊ฐ ๋ง๋ค์ด์ง๋ ์ ์ฒด์ ์ธ ๊ณผ์ ์ ์ตํ๋ ๊ฒ. (ํ๋ก ํธ๋ถํฐ ์๋ฒ๊น์ง)
์ด๋ฅผ ์ํด Velog๋ฅผ ํด๋ก ์ฝ๋ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค.
์๋ก ์ด ๊ธธ์๋๋ฐ, ํด๋ก ์ฝ๋ฉ์ ํ๋ค๋ณด๋ ๋๋กญ๋ฐ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ์ผ์ด ์์๋ค.
์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด ์๋๋ผ, ๋์์ธ๋ ์ปค์คํ ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
1. react-dropdown ์ค์นํ๊ธฐ
ํฐ๋ฏธ๋์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ค๋ค.
// npm์ผ๋ก ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
$ npm install react-dropdown
// yarn์ผ๋ก ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
$ yarn add react-dropdown
https://www.npmjs.com/package/react-dropdown
( ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ ์ฌ์ดํธ ์ฐธ๊ณ ํ๊ธฐ )
2. ์๋จ์ import ํด์ฃผ๊ธฐ
์ค์น๊ฐ ์๋ฃ ๋์๋ค๋ฉด, ํ์ผ ์๋จ์ ๋ค์ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ฌ import ํด์ค๋ค.
์ค์น๊ฐ ์ ๋์๋ค๋ฉด, ์๋ฌด๋ฐ ์๋ฌ ์์ด import๊ฐ ๊ฐ๋ฅํ๋ค.
import Dropdown from 'react-dropdown';
import "react-dropdown/style.css";
๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ import ํด์ค์ผ ํ๋ค !
์ด๋ ๊ฒ import๊ฐ ์ ๋์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋ ๋ด์์ ์ฌ์ฉํ ์ ์๋ค.
const options = [
'one', 'two', 'three'
];
const defaultOption = options[0];
<Dropdown options={options} onChange={this._onSelect} value={defaultOption} placeholder="Select an option" />;
(์ ์ฝ๋๋ ๊ณต์ ๋ฌธ์์ ๋์จ ์์ ์ด๋ค !)
3. ์ปค์คํ ํ๊ธฐ !!
์ ์ด๋ฏธ์ง๋ ๋ด๊ฐ ์ปค์คํ ํด์ ๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
์ปค์คํ ์ ํ์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ ๋์์ธ์ผ๋ก ๋ณด์ฌ์ง๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ปค์คํ ํ์๋์ง ํ๋์ฉ ์ดํด๋ณด์ !!
3-1. ๋๋กญ๋ฐ์ค ์์ฒด๋ฅผ ์ปค์คํ ํ๋ ค๋ฉด,
์ฌ๊ธฐ์์ ๋๋กญ๋ฐ์ค ์์ฒด๋, ์๋์ ๊ฐ์ ์ด๋ฏธ์ง์ด๋ค. ์ฆ, ๋ฐ์ค๊ฐ ์ด๋ฆฌ์ง ์์, ์๋ฌด๊ฒ๋ ํ์ง ์์์ ๋ ๋ณด์ฌ์ง๋ ๋ถ๋ถ์ด๋ค.
ํ์ฌ ๋ด๊ฐ ์ค ์ปค์คํ ์, ๋ฐฐ๊ฒฝ์, ํฐํธ ํฌ๊ธฐ, ๋ฐ์ค border-radius, ๋์ด, ๋๋น๊ฐ ์๋ค.
์ด๋ฌํ ์์ฑ๋ค์ ์์ ํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋๋ค.
์ ์ฐธ๊ณ ๋ก ๋๋ styled component๋ฅผ ์ฌ์ฉํ์๋ค.
const StyledDropdown = styled(Dropdown)`
.Dropdown-control {
background-color: ${theme.colors.secondBlack};
color: white;
border-radius: 5px;
border-color: transparent;
width: 110px;
height: 32px;
font-size: 13px;
}
`;
์ด๋ ๊ฒ .Dropdown-control์ ๊ฐ์ ธ์ ํด๋น ์์ฑ์ ์ ๊ทผํด ์์ ํ๋ฉด ๋๋ค.
3-2. ๋๋กญ๋ฐ์ค๋ฅผ ์ด์์ ๋ ๋ณด์ฌ์ง๋ ๋ฉ๋ด๋ฅผ ์ปค์คํ ํ๋ ค๋ฉด,
๋๋กญ๋ฐ์ค๋ฅผ ํด๋ฆญํ์ฌ ์ด๋ฆฌ๋ ๋ฉ๋ด๋ค์ ์ปค์คํ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ด๋ ๊ฒ ๋๋ ๋ฉ๋ด์ ๋ฐฐ๊ฒฝ ์, ํฐํธ ํฌ๊ธฐ, ํฐํธ ์ ๋ฑ์ ์ง์ ํ์๋ค.
๋๋กญ๋ฐ์ค ๋ฉ๋ด๋ฅผ ์ปค์คํ ํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋๋ค.
.Dropdown-menu {
background-color: ${theme.colors.secondBlack};
color: white;
font-size: 13px;
}
์ด๋ ๊ฒ .Dropdown-menu์ ์ ๊ทผํ์ฌ ํด๋น ์์ฑ๋ค์ ์ปค์คํ ํ๋ฉด ๋๋ค.
3-3. ์ ํ๋ ์ต์ ์ ์ปค์คํ ํ๋ ค๋ฉด,
๋ด๊ฐ ์ ํํ ์ต์ ์ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ ธ์ผ ํ๋ค. 3-2์์์ ์ฌ์ง์ ๋ณด๋ฉด, ๋ด๊ฐ ์ ํํ '์ด๋ฒ ์ฃผ'๋ ์์์ด ๋ค๋ฅด๊ฒ ํ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ฒ๋ผ ์ ํํ ์ต์ ์ ๋ํ ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ด๋ ๊ฒ ํ๋ฉด ๋๋ค.
.Dropdown-option.is-selected {
color: ${theme.colors.primary};
background-color: ${theme.colors.secondBlack};
font-size: 13px;
}
์ด๋ ๊ฒ .Dropdown-option.is-selected์ ์ ๊ทผํ์ฌ ์ ํํ ์ต์ ์ ๋ํ ๋์์ธ์ ์ปค์คํ ํ ์ ์๋ค.
3-4. ๋ง์ง๋ง์ผ๋ก, ๋๋จธ์ง ์ต์ ๋ค์ ์ปค์คํ ํ๋ ค๋ฉด,
์ด ๋ถ๋ถ์ 3-2 ๋ถ๋ถ์์ ์ด๋ฏธ ์ค์ ํด์ฃผ์๋ค ์๊ฐํ์ผ๋, ๋ฐ๋ก ๋ ํด์ค์ผ ์ ์ฉ์ด ๋์๋ค.
3-2, 3-4 ๋ ์ค ํ๋๋ผ๋ ์ฃผ์์ฒ๋ฆฌํ๋ฉด ์ด๋ ๊ฒ ๋๋ค..
์ ํ๋ ์ต์ ์ด ์๋ ๋๋จธ์ง ์ต์ ๋ค์ ์ปค์คํ ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ค.
.Dropdown-option {
color: ${theme.colors.white};
font-size: 13px;
}
์ด๋ ๊ฒ .Dropdown-option์ ์ ๊ทผํ์ฌ ํด๋น ์์ฑ๋ค์ ์ค์ ํด์ฃผ์๋ค.
4. ์ ๋ฆฌํ๋ฉด,
์ด๋ ๊ฒ ํ ์ ์๋ค. ๋๋ styled component๋ฅผ ์ฌ์ฉํ์๊ธฐ์ ์ด๋ ๊ฒ ๋ฐฑํฑ ์์ ๋ฃ์ด์ฃผ์๋ค.
const StyledDropdown = styled(Dropdown)`
.Dropdown-control {
background-color: ${theme.colors.secondBlack};
color: white;
border-radius: 5px;
border-color: transparent;
width: 110px;
height: 32px;
font-size: 13px;
}
.Dropdown-menu {
background-color: ${theme.colors.secondBlack};
color: white;
font-size: 13px;
}
.Dropdown-option.is-selected {
color: ${theme.colors.primary};
background-color: ${theme.colors.secondBlack};
font-size: 13px;
}
.Dropdown-option {
color: ${theme.colors.white};
font-size: 13px;
}
`;
์ค์ ์ด ์คํ์ผ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ๋ฉด ๋๋ค.
<StyledDropdown options={options} value={defaultOption} />
์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํด์ฃผ๋ dropdown์ ๋ด๊ฐ ์ํ๋ ๋์์ธ๋๋ก ์ปค์คํ ํ ์ ์๋ค.
'๐ฅ๏ธ react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[react] ThemeProvider ์ฌ์ฉํ๊ธฐ (0) | 2024.01.20 |
---|---|
[react] dropdown ๋ง๋ค๊ธฐ (์์ด์ฝ, ๋๋กญ๋ค์ด) (0) | 2024.01.17 |
[react] markdown editor, viewer ๊ตฌํํ๊ธฐ (2) | 2023.01.29 |
[react] useEffect() (0) | 2022.12.27 |
styled components (0) | 2022.12.27 |