Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- ICT์ธํด์ญ
- ํ๋ก ํธ์๋
- ๊นํ์ฌ์ดํธ
- ๋งฅ๋ถ
- ์ฒดํฌ๋ฐ์ค์ปค์คํ
- ICT์ง์
- styled-components
- ์์ด๋์ค๋ณต
- ๋จธ์ ๋ฌ๋
- CSS
- react
- java 11 ์ค์น
- M1
- ์ปด๊ณต์ ๋ฐฐ
- ios
- ํผ๊ณต๋จธ์
- svg์
- ๋ฅ๋ฌ๋
- ์ปค์คํ
- ํผ์ ๊ณต๋ถํ๋ ๋จธ์ ๋ฌ๋
- ํ ์คํธ ์ธํธ
- api๊ณตํตํ
- ์์
- ๊ณผ๋์ ํฉ๊ณผ ๊ณผ์์ ํฉ
- axios์ธ์คํด์ค
- ICTํ๊ธฐ
- ๊นํ์๋ฌ
- XCode
- ์๋ฆฟ์์ ํ
- ์ทํ๊ท๊ฑธ์ด
Archives
- Today
- Total
Hi-๋๐ High-๋โ๏ธ
[React] Toggle Component ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
๋ด๊ฐ ํ๋ ํ๋ก์ ํธ์์ ์๋ฆผ ์ค์ ์ ์ํด ํ ๊ธ ์ค์์น๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
1. ํ ๊ธ ์ค์์น๋?
๐ก ํ ๊ธ ์ค์์น
ํ ๊ธ ์ค์์น๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๋ ๋ฌผ๋ฆฌ์ ์ค์์น์ฒ๋ผ "ON/OFF"์ ๊ฐ์ด ๋๊ฐ์ง ๋ฐ๋๋๋ ์ํ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์๊ฐ ์ค์์น๋ฅผ ๋๋ฅผ ๋๋ง๋ค ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋๋ก ํด์ผํ๋ค.
2. ํ ๊ธ ์ค์์น ๊ตฌํ ๊ฒฐ๊ณผ
3. ์ค์ Point
๐ฑ props ์ด์ฉํ๊ธฐ
props๋ก toggle์ ์ํ(on/off)๋ฅผ ๋๊ฒจ์ฃผ์ด css ๋ถ๋ถ์์ ์กฐ๊ฑด๋ถ๋ก ์คํ์ผ๋ง์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์๋ค.
(ex) ${props => props.isToggleOn ? 'background-color: #7BAB6E' : 'background-color: #CECECE' };
๐ฑ transition ์ฌ์ฉํ๊ธฐ
ํ ๊ธ ๋ฒํผ์ด ์์ฐ์ค๋ฝ๊ฒ ์์ง์ผ ์ ์๋๋ก css์ transition ์์ฑ์ ํ์ฉํ์๋ค.
(ex) transition: all 0.3s;
4. ์ ์ฒด ์ฝ๋
SettingToggle.js
import { useState } from "react";
import { Toggle, ToggleButton, ToggleWrap } from "./style";
const SettingToggle = () => {
const [isToggleOn, setIsToggleOn] = useState(false);
return (
<ToggleWrap onClick={() => setIsToggleOn(!isToggleOn)}>
<Toggle isToggleOn={isToggleOn}>
<ToggleButton isToggleOn={isToggleOn}></ToggleButton>
</Toggle>
</ToggleWrap>
);
};
export default SettingToggle;
Style.js
import styled from "styled-components";
export const ToggleWrap = styled.div`
display: flex;
flex-direction: row;
align-items: center;
`;
export const Toggle = styled.div`
transition: all 0.3s;
position: relative;
width: 34px;
height: 18px;
border-radius: 16px;
outline: none;
padding: 0 2px;
${props => props.isToggleOn ?
'background-color: #7BAB6E'
: 'background-color: #CECECE'
};
`;
export const ToggleButton = styled.div`
transition: all 0.3s;
display: block;
width: 14px;
height: 14px;
border-radius: 16px;
margin-top: 2px;
background-color: white;
transform: ${props => props.isToggleOn ? 'translateX(20px)': 'translateX(0px)'};
`;
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] RadioButton ์ปค์คํ ํ๊ธฐ with styled-components (2) | 2023.10.27 |
---|---|
[React] Datepicker ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ๋ฒ + ์๊ฐ ์ถ๊ฐ (0) | 2023.07.25 |
[React] ์๋ฌ ํด๊ฒฐ - "sh: react-scripts: command not found" (0) | 2023.07.04 |
[React] API ์ค์ ๊ณตํตํ - ํ๊ฒฝ๋ณ์, axios ์ธ์คํด์ค ์ฌ์ฉํ๊ธฐ (0) | 2023.05.08 |
[React] API ์ฐ๋ํ๊ธฐ with axios (0) | 2023.05.08 |