๋ชฉ์ฐจ
Javascript classList.toggle๋ก jQuery addClass, removeClass, toggleClass ๊ตฌํํ๊ธฐ / ๋๋ณด๊ธฐ ๋ฒํผ ํด๋ฆญ์ ์์ญ ํ์ฅ
์๋ก
Javascript์ React์์ ๋๋ณด๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ด์ฉ์ด ํ์ฅ๋๋ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ด๋ฅผ ์ํด์ jQuery๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ์ง๋ง, React์์๋ ๋ถํธํจ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ref์ useState๋ฅผ ํ์ฉํ์ฌ ๋ ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฒ ๋ธ๋ก๊ทธ ํฌ์คํ ์์๋ classList.toggle ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ jQuery์ addClass, removeClass, toggleClass๋ฅผ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ํ, ๋๋ณด๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ญ์ ํ์ฅํ๋ ์์ ๋ ํจ๊ป ์ ์ํ๊ฒ ์ต๋๋ค.
classList.toggle๋ก addClass, removeClass, toggleClass ๊ตฌํํ๊ธฐ
React์์ classList.toggle ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ jQuery์ addClass, removeClass, toggleClass๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. classList๋ DOM ์์์ ํด๋์ค๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. toggle ๋ฉ์๋๋ ํด๋์ค๊ฐ ์กด์ฌํ๋ฉด ์ ๊ฑฐํ๊ณ , ์์ผ๋ฉด ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ํด๋์ค๋ฅผ ์ฝ๊ฒ ์ถ๊ฐ, ์ ๊ฑฐ, ํ ๊ธํ ์ ์์ต๋๋ค.
import React, { useState } from 'react';
import './styles.css';
const ExtendClass = (e) => {
e.target.parentElement.classList.toggle("extend");
};
const ExampleComponent = () => {
return (
<div className="person-detail-form-body">
<h5>๋์</h5>
<div className="extender-wrap">
<ul className="history-list medium-list">
<li>๊ธ๊ธ๊ธ</li>
<li>๊ธ๊ธ๊ธ</li>
<li>๊ธ๊ธ๊ธ</li>
<li>๊ธ๊ธ๊ธ</li>
<li>๊ธ๊ธ๊ธ</li>
<li>๊ธ๊ธ๊ธ</li>
</ul>
<button
className="btn-extender"
onClick={(e) => {
ExtendClass(e);
}}
></button>
</div>
</div>
);
};
CSS๋ก ์์ญ ํ์ฅ ์ ์ดํ๊ธฐ
์ ์ฝ๋์์ ์ฌ์ฉ๋ CSS๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. extender-wrap ํด๋์ค๋ max-height๋ฅผ ์กฐ์ ํ์ฌ ๋ด์ฉ์ ์จ๊ธฐ๊ณ ๋ณด์ฌ์ค๋๋ค.
.extender-wrap {
margin-bottom: 20px;
&:not(.extend) {
& > ul {
max-height: 100px;
overflow: hidden;
}
}
& > ul {
margin-bottom: 5px;
}
}
๋๋ณด๊ธฐ ๋ฒํผ ๋์์ธ
๋ฒํผ์ ๋ถ๋ชจ ์์์ ์์์ผ๋ก ๋ค์ด๊ฐ ์์ผ๋ฉฐ, ๋ฒํผ์ ์ด๋ฒคํธ์์ ๋ถ๋ชจ ์์๋ฅผ ์ฐพ์์ ํด๋์ค๋ฅผ ํ ๊ธํฉ๋๋ค. ๋ฒํผ์ ํ์ดํ๋ CSS transform ์์ฑ์ ์ด์ฉํ์ฌ ๋ค์ง์ด ์ค๋๋ค.
.btn-extender {
width: 100%;
display: flex;
border: 0 none;
justify-content: center;
align-items: center;
&::after {
font-family: sans-serif;
font-size: 1.05rem;
content: "ใ";
transform: rotate(90deg);
}
.extend &::after {
transform: rotate(-90deg);
}
}
๋ง๋ฌด๋ฆฌ
์ ์์ ๋ฅผ ํตํด classList.toggle ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ jQuery์ addClass, removeClass, toggleClass๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ๋ํ, React์์ ๋๋ณด๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ญ์ ํ์ฅํ๋ ์์ ๋ ์ ์ํ์ต๋๋ค. ์ด์ ์ด ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ ๋ค์ํ ์น ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
์ฐธ๊ณ ์๋ฃ
- MDN Web Docs: Element.classList
๋๊ธ