React
[React] Toggle Component ๋ง๋ค๊ธฐ
ํ์ด๋
2023. 7. 19. 23:59
๋ด๊ฐ ํ๋ ํ๋ก์ ํธ์์ ์๋ฆผ ์ค์ ์ ์ํด ํ ๊ธ ์ค์์น๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
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)'};
`;