React

React | do not nest ternary expression (Nextjs , typescript, airbnb style guide)

2022. 2. 10. 10:52
목차
  1. 에러 발생 상황
  2. 또 다른 에러 
작업환경
- nextjs
- typescript 
- airbnb styleguide

에러 발생 상황

부모 컴포넌트로부터 props로 num 을 받아오는 자식 컴포넌트인 item 컴포넌트에서 props 값에 따른 각기 다른 css 스타일 적용을 위해 삼항연산자를 사용하였는데, do not nest ternary expression 라는 에러가 발생하였다. 

아마도 airbnb 스타일 가이드 때문에 발생한 에러가 아닌가 싶다. 

<div
  className={`${styles.itemInfo} ${
    num === '01'
      ? styles.typeOne
      : num === '02'
      ? styles.typeTwo
      : styles.typeThree
  }`}
>

첫번째 시도

삼항연산자를 switch 문으로 대체 하였으나 string 값 자체가 클래스명으로 적용되어서 module.css 가 적용되지 않았다. 

let types = 'styles.typeOne';
  switch (num) {
    case '01':
      types = 'styles.typeOne';
      break;
    case '02':
      types = 'styles.typeTwo';
      break;
    case '03':
      types = 'styles.typeThree';
      break;
    default:
      types = 'styles.typeOne';
  }

  return (
    <div className={`${styles.itemInfo} ${types}`}>

styles가 styles 메서드로 사용되지 않고 string 그 자체로 클래스명에 들어가게 된다. 따라서 css가 적용되지 않는다.

두번째 시도

let types = 'styles.typeOne';
  switch (num) {
    case '01':
      types = 'typeOne';
      break;
    case '02':
      types = 'typeTwo';
      break;
    case '03':
      types = 'typeThree';
      break;
    default:
      types = 'typeOne';
  }

  return (
    <div className={`${styles.itemInfo} ${types}`}>
 
...

페이지는 랜더링이 된다. 그러나 맨 위에서 파일 구조를 보았다시피 현재 프로젝트는 css를 module로 만들어 관리하고 있기 때문에 className은 반드시 styles.[클래스명] 이 되어야 하는데, 이렇게 할 경우 styles가 빠져있기 때문에 css 모듈이 적용되지 않는다.

 

해결

return (
    <div
      className={`${styles.itemInfo} 
          ${num === '01' ? styles.typeOne : ''} 
          ${num === '02' ? styles.typeTwo : ''}
          ${num === '03' ? styles.typeThree : ''}
      `}
    >

참고자료

pluralsight.com/guides/applying-classes-conditionally-react

 

또 다른 에러 

Dangerous property 'dangerouslySetInnerHTML' found

...
const itemDate = [
  {... 
  	const adnDescription =
    	'첫번째줄<br/>두번째줄';
  },
  {...
  	const adxDescription =
    	'첫번째줄<br/>두번째줄<br/>세번째줄';
  },
  {...
  	const crmDescription =
    	'첫번째줄<br/>두번째줄';
  },
 ];
 
 return (
 ...
	<dd
        dangerouslySetInnerHTML={{
          __html:
            num === '01'
              ? adnDescription
              : num === '02'
              ? adxDescription
              : crmDescription,
        }}
    />
...

해결

...
const itemData = [
 {...
  	const adnDescription = [
    	'첫번째줄', 
    	'두번째줄';
  	],
  },
  {...
  	const adxDescription = [
    	'첫번째줄',
    	'두번째줄',
    	'세번째줄';
  	],
  },
  {...
  	const crmDescription = [
    	'첫번째줄',
    	'두번째줄';
  	],
  },
 ],
 
 return (
 ...
	<dd
        {description.map((item) => (
           <span key={item}>
              {item} <br />
           </span>
        ))}
    />
...

 

'React' 카테고리의 다른 글

React | 구글 리캡챠(reCaptcha) v2 사용하기  (0) 2022.02.25
React | 카카오 맵 API 사용하여 지도 띄우기  (0) 2022.02.23
React | 동적 라우팅  (0) 2022.01.26
React | props와 state  (0) 2022.01.14
React | 로그인 버튼 활성화(React를 이용하여)  (0) 2022.01.13
  1. 에러 발생 상황
  2. 또 다른 에러 
'React' 카테고리의 다른 글
  • React | 구글 리캡챠(reCaptcha) v2 사용하기
  • React | 카카오 맵 API 사용하여 지도 띄우기
  • React | 동적 라우팅
  • React | props와 state
3jun
3jun
3jun
3jun
3jun
전체
오늘
어제
  • 분류 전체보기 (94)
    • 프로젝트 (5)
    • Web (9)
    • JavaScript (19)
    • React (12)
    • 알고리즘 (31)
    • Git (3)
    • AWS (3)
    • TypeScript (3)
    • CS (2)
    • Error (6)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스 코테
  • 프로그래머스 코딩테스트
  • 유효성 로직
  • 백준 코테
  • 백준js
  • state
  • react
  • 백준 알고리즘
  • msw 에러
  • 프로그래머스 코딩테스트 js
  • this.props.history.push
  • 프로그래머스 js
  • 자바스크립트
  • 백준 온라인저지
  • airbnb style guide
  • Promise
  • JavaScript
  • msw
  • 백준 js
  • outer environment

최근 댓글

최근 글

hELLO · Designed By 정상우.
3jun
React | do not nest ternary expression (Nextjs , typescript, airbnb style guide)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.