[TIL] 컴포넌트 재사용 > 컴포넌트 속성을 props로 전달해서 css 관리하기!

이나현·2021년 9월 7일
0

React

목록 보기
7/10
post-thumbnail

기업협업 관련 TIL 2번째!

장황하게 긴 제목과 같이 딱 맞는 설명이 없다.
결국, 컴포넌트의 재사용과 관련한 이야기이다

컴포넌트는 한 페이지의 코드가 장황하게 되는 것을 예방할 뿐만 아니라 재사용으로 효율성을 높여준다.

나의 경우에는 컴포넌트를 재사용할 수 있을 것 같았는데, blocker가 컴포넌트에 따른 css가 다르다는 것이었다.

만약 styled component를 사용했다면, 이 문제가 쉽게 해결될 수 있었겠지만! 브리딩에서는 scss를 사용하여 css를 바꾸는 게 쉽지 않았다.
(아마.. 내가 아직 퍼블리싱 능력이 부족해서 그럴 가능성이 99%이다.)

나의 솔루션은 컴포넌트를 복사해서 새로 만드는 것이었다..
그러다가 효영 백엔드 개발자님께서 "컴포넌트에 속성을 줘서 그 속성을 props로 넘겨서 props 값을 classname에 주면 어때요?"라는 제안을 하셨다.

처음에는 되는가 안되는 가 긴가민가했지만!! 결국에는 성공!

컴포넌트 속성값에 따라 css를 다르게 줄 수 있게 되었다.
(물론 이때에는 속성값에 따른 css를 다 작성해줘야해서..ㅎ 이런 면에서는 비효율적이지만 컴포넌트를 재사용할 수 있게되었다.)

<나의 코드>

//리뷰.tsx
import {Overview} from '../../Overview/Overview'
.
.
.
<Overview
  title = ""
  content = {reviewDetail.review.REV_CONTENT}
  wraptype = "wrapReview"
/>

wraptype 속성을 Overview 컴포넌트의 props로 전달

//Overview.tsx
export const Overview: React.FC<Props> = ({ title, content, wraptype }) => {
 return (
    <div className={cx(wraptype)}>
      <p
        className={cx(`${wraptype}-title`)}
        dangerouslySetInnerHTML={{ __html: title }}
      />
      <p className={cx(`${wraptype}-content`)}>
        {toggleEllipsis(content, limit).string}
      </p>
      {toggleEllipsis(content, limit).isShowMore ? (
        <button className={cx(`${wraptype}-morebutton`)} onClick={handleCollapse(content)}>
          더보기
        </button>
      ) : (
        (content as any).length >= limit ? (
          <button 
            className={cx(`${wraptype}-morebutton`)} 
            onClick={handleCollapse(content)}
          >
            접기
          </button>
        ) : null
      )}
    </div>
  );

}
//Overview.module.scss
.overview-content {
  font-weight: 400;
  line-height: 28px;
  color: #2c2c2c;
  margin-bottom: 16px;
}
.wrapReview-content {
  font-size: 14px;
  font-weight: 400;
  line-height: 24px;
  color: #5f5f5f;
  margin-right: 16px;
}

css 부분이 달라져야하기 때문에 이렇게 다 작성하게 된다.

엄청 편한 방법은 아니지만 scss를 사용하면서 컴포넌트를 재사용할 수 있는 새로운 방법을 배운 것 같아서 신기했다!!

내가 취업하는 모든 곳이 내가 원하는 방향대로 만들어있지 않을 수 있다. 그렇기에 기존의 코드를 최대한 활용하면서 효율성을 높일 수 있는 방법을 많이 고민하고자 노력하는 요즘이다.

언젠가는 어떤 코드를 마주하더라도 의연하게 대처할 수 있는 개발자가 되길 바란다.

profile
technology blog

0개의 댓글