공청
개발하는 금융인
공청
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • 개인적인 이야기 (27)
    • IT에 관한 글 (15)
    • 경제, 금융 (12)
    • Python (2)
    • Javascript (6)
    • golang (2)
    • 비전공자를 위한 IT 지식 (0)
    • SQL (SQLD,SQLP) (1)
    • React (Front-end) (29)
    • 정보처리기사 (0)
    • Typescript (4)
    • (study) 모던 자바스크립트 Deep Dive (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • python
  • go
  • HTTP
  • 프로그래밍
  • ChatGPT
  • 기술스택
  • Golang
  • 미국주식
  • vite
  • 트래블카드
  • 인터넷
  • sql
  • approute
  • 짧은생각
  • 트래블월렛
  • 조건부렌더링
  • next.js
  • 일기
  • vscode
  • 창업
  • react-router
  • 언섹시비즈니스
  • useref
  • typescript
  • Effective Typescript
  • react
  • 웹개발
  • javascript
  • Fira Code
  • WSGI

최근 댓글

최근 글

티스토리

반응형
공청

개발하는 금융인

React에서 동적으로 스타일링하기 (삼항연산자, CSS 적용)
React (Front-end)

React에서 동적으로 스타일링하기 (삼항연산자, CSS 적용)

2023. 2. 14. 21:46

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

"블로그 내의 광고와 쿠팡 링크를 클릭해주시면 블로그 운영에 큰 힘이 됩니다."

반응형

 

 

리액트에서 강력한 부분이 바로

조건부 렌더링이다.

 

조건부 렌더링에 대해 알아보기:

https://ko.reactjs.org/docs/conditional-rendering.html

 

조건부 렌더링 – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

이 부분은 JSX에서만 적용되는 것이 아니라

CSS 스타일링에서도 적용이 가능하다.

 

아래는 예시이다.

 

import React, { useState } from 'react';

import Button from '../../UI/Button/Button';
import './CourseInput.css';

const CourseInput = props => {
  const [enteredValue, setEnteredValue] = useState('');
  const [isValid, setIsValid] = useState(true)
  // 사용자가 제출한 것이, 입력한 것이 유효한지 확인하기 위한 Bool
  // 초기값은 true로 주고 아래에서 False를 set할 예정

  const goalInputChangeHandler = event => {
    setEnteredValue(event.target.value);
  };

  const formSubmitHandler = event => {
    event.preventDefault();
    if (enteredValue.trim().length === 0) {
      // 문자열.trim() -> 양쪽 모든 개행, 빈칸 없애는 메서드
      setIsValid(false); // 빈 값이 오는 경우에는 명백하게 잘못된 값이 들어오기 때문에 false
      return;
    }
    props.onAddGoal(enteredValue);
  };

  return (
    <form onSubmit={formSubmitHandler}>
      <div className="form-control">
        <label style={{ color: !isValid ? "red" : "black" }}>Course Goal</label>
        {/* 해당하는 값으로 스타일을 적용할 수 있다. */}
        <input
          style={{
            borderColor: !isValid ? "red" : "black",
            background: !isValid ? "salmon" : "transparent",
          }}
          type="text"
          onChange={goalInputChangeHandler}
        />
      </div>
      <Button type="submit">Add Goal</Button>
    </form>
  );
};

export default CourseInput;

 

위의 예시 경우,

유저가 입력한 값이 유효한지 안 한 지를 판단한 후 setState를 통해 상태 저장을 하고

해당 상태에 따라서 CSS 스타일링을 동적으로 수행한다.

 

또 다른 방법은 조건부로 클래스를 추가하는 것이다.

위의 방법은 인라인 스타일링으로 CSS의 모든 우선순위 중 가장 높게 잡히는 문제가 있다.

 

이것을 해결하기 위해서 CSS에 내가 원하는 스타일과 클래스를 명시해 두고

원하는 값이 오면 해당 클래스를 활성화하는 방식으로 한다.

 

예시로 리턴 부분만 작성해 보면

  return (
    <form onSubmit={formSubmitHandler}>
      <div className={`form-control ${!isValid ? "invalid" : ""}`}>
        {/* 동적 스타일링 */}
        <label>Course Goal</label>
        {/* 해당하는 값으로 스타일을 적용할 수 있다. */}
        <input type="text" onChange={goalInputChangeHandler} />
      </div>
      <Button type="submit">Add Goal</Button>
    </form>
  );

백틱과 ${}를 통해서 내가 원하는 값이 있을 때 invalid를 클래스에 붙여서 활성화할 수 있다.

 

 

Udemy에서 리액트를 듣다가 조건부로 스타일링을 할 수 있다는 사실에 메모성으로 남겨둔다.

반응형
    'React (Front-end)' 카테고리의 다른 글
    • [HOOKS] useEffect의 설명과 예시코드
    • (React 다국어 웹 만들기) 1. Vite를 통한 React 프로젝트 세팅
    • (React) useState hook의 setState를 통해 여러 값의 상태값을 저장하고 싶을 때
    • 리액트를 공부하는 순서와 공부해야할 것들, 샘플 프로젝트 추천
    공청
    공청
    투자, 프로그래밍, IT에 대한 글을 씁니다.

    티스토리툴바