728x90
반응형
SMALL
React에서 className을 사용하여 조건부 스타일을 적용하는 방법은 유용하며,
위 코드의 방식은 자주 사용되는 패턴입니다. 이를 자세히 설명하겠습니다.
1. 구조 설명
className={`block my-2 hover:cursor-pointer ${
activeIndex === 1 ? "text-black font-bold" : "text-gray-400"
}`}
이 코드는 className에 문자열을 동적으로 할당하는 방식입니다. 템플릿 리터럴(Template Literal)을 사용하여 CSS 클래스를 조건에 따라 추가하거나 변경합니다.
1.1. 템플릿 리터럴 기본 구조
- 백틱(`): 템플릿 리터럴을 정의합니다.
- 내부 변수 삽입: ${} 구문을 사용하여 JavaScript 코드를 삽입할 수 있습니다.
React.js 환경에서 useState훅을 사용하여 상태관리를 하고, 현재 값을 click 키워드에 저장합니다.
const [click, setClick] = useState(false);
const onHandleClick = (data) => {
setClick(data);
alert("클릭되었습니다!");
<label
onClick={() => onHandleClick(0)}
className={`block my-2 hover:text-slate-500 hover:cursor-pointer ${
click === 0 ? "text-black font-bold" : "text-gray-500"
}`}
>
그리고 이렇게 className={` 스타일링 ${ ? " " : " " } `} - 3항 연산자를 이용하여 상태 관리를 합니다.
이때, 사용자가 아무런 아이콘도 클릭하지 않을 경우에 불투명도를 제거하기 위해서 처음 useState()의 초기값을 null로 설정합니다!
const [click, setClick] = useState(null);
import { useState } from "react";
const Common = () => {
const [click, setClick] = useState(null);
const onHandleClick = (data) => {
setClick(data);
alert("클릭되었습니다!");
};
return (
<>
<nav className="absolute flex flex-col items-center justify-center text-center border rounded-lg right-2 border-slate-500 w-30">
<label
onClick={() => onHandleClick(0)}
className={`block my-2 hover:text-slate-500 hover:cursor-pointer ${
click === 0
? "text-black font-bold"
: click === null
? "texty-gray-500 "
: "text-gray-500 opacity-50"
}`}
>
<img
src="/images/지도.png"
alt="지도"
className="w-[30px] h-[30px]"
/>
<p className="font-yeonsung">지도</p>
</label>
<hr className="w-full border border-slate-400" />
<label
onClick={() => onHandleClick(1)}
className={`block my-2 hover:text-slate-500 hover:cursor-pointer ${
click === 1
? "text-black font-bold"
: click === null
? "text-black "
: "text-gray-500 opacity-50"
}`}
>
<img
src="/images/커뮤니티.png"
alt="커뮤니티"
className="w-[30px] h-[30px] ml-1"
/>
<p className="font-yeonsung">커뮤니티</p>
</label>
<hr className="w-full border border-slate-400" />
<label
onClick={() => onHandleClick(2)}
className={`block my-2 hover:text-slate-500 hover:cursor-pointer ${
click === 2
? "text-black font-bold"
: click === null
? "text-black "
: "text-gray-500 opacity-50"
}`}
>
<img
src="/images/사람.png"
alt="사람"
className="w-[30px] h-[30px] ml-3"
/>
<p className="font-yeonsung">마이페이지</p>
</label>
</nav>
</>
);
};
export default Common;
중첩된 3항 연산자(ternary operator)는 여러 조건을 처리할 때 조건문을 한 줄로 작성하는 방식입니다.
3항 연산자는 다음과 같은 기본 구조를 가집니다:
기본 구조
condition ? expr1 : condition2 ? expr2 : expr3
- 첫 번째 조건이 참이면 expr1을 실행.
- 첫 번째 조건이 거짓이고 두 번째 조건이 참이면 expr2를 실행.
- 두 조건이 모두 거짓이면 expr3을 실행.
728x90
반응형
LIST
'프로젝트(Project)' 카테고리의 다른 글
React Route-dom 라이브러리를 활용한 컴포넌트간 화면 전환 (0) | 2024.11.20 |
---|---|
비밀번호 눈 아이콘 클릭 시, 비밀번호 표시 및 표시(X) in 리액트(vite) + 수평선 그리는 법(html) (1) | 2024.11.18 |
[Figma] 동그라미 부분 추출하기 - 마스크 기능 활용 (0) | 2024.11.18 |
구글 폰트 적용하는 방법 in Vite (0) | 2024.11.18 |
프로젝트 : 카운터 앱 구현 + TailwindCSS 우선순위 설정 x 하는 방법 (1) | 2024.11.09 |