React에서 CSS를 어떻게 활용합니까?스스로 결론을 내려 하였다

개시하다


최근 CSS에 대한 학습을 요약해 봅시다.특히 React의 CSS에서 저는 어떻게 해야 할지 고민을 많이 했기 때문에 제 마음속의 결론을 썼으면 좋겠다고 생각합니다!

CSS의 세계적 동향


우선 세계 CSS의 동향을 살펴봅시다.2021년stateoffcss 사이트를 살펴보겠습니다.
https://2021.stateofcss.com/ja-JP/
최근 움직임으로 CSS 모듈즈가 많이 사용되고 있고, Tailwind CSS가 급격히 늘어나는 것은 잘 알고 있다.

사전 및 후면 프로세서


stateoffcss에 나타나는 프로세서와 프로세서를 설명합니다.

  • 프로세싱 프로그램
    개별 언어(메타언어)로 작성된 스타일 구문을 CSS 구문으로 변환합니다.
    예: Sass, Less, Stylus

  • 포스트 프로세서
    편리한 플러그인 등을 통해 CSS 문을 더 좋은 CSS로 변환합니다.(자동 성형 또는 접두사 추가 등)
    예: PostCSS
  • CSS Modules


    https://github.com/css-modules/css-modules
    CSS Modules 를 살펴보겠습니다.*module.css에서 스타일을 기술하고 구성 요소 내 import에서 사용합니다.
    style.module.css
    .errorButton {
      color: white;
      background-color: red;
    }
    
    Button.jsx
    import styles from './Button.module.css'
    
    const Button = () => (
      <button className={styles.errorButton}>
        Destroy
      </button>
    )
    
  • 이점
  • 직관적이고 알기 쉽다
  • 구성 요소 레벨에서 스타일을 적용할 수 있으며 이름 충돌을 고려할 필요가 없음
  • 그리기 위해 읽는 CSS를 최소화하고 성능도 ○
  • Nextjs에서도 누르기
  • 이용자도 많음
  • 단점
  • 분리 파일 필요
  • 무화과
  • 를 명명해야 한다
  • 폐지될 가능성이 높다
  • 웹 패키지의 css-loader를 실시했지만 지원 종료 암시
  • CSS 모듈즈는 유지 보수 단계(수정만)지만 매우 오래된 기술이어서 논란이 많다.우리는 모든 개발자가 이동할 수 있도록 잠시 지원하지만 새로운 기능은 없다.
  • https://github.com/webpack-contrib/css-loader/issues/1050#issuecomment-592541379
  • CSS-in-JS


    다음은 바로 js에서 CSS-in-JS를 기술하여 소개할 수 있습니다.

    styled-components


    https://styled-components.com/
    CSS-in-JS라면 스타일드-components를 들 수 있을 것 같습니다.다음과 같이 기술하다.
    sample.jsx
    import styled from "styled-components"
    
    export default function Home() {
      //Titleはh1タグ
      const Title = styled.h1`
            // スタイルを記述
        font-size: 1.5em;
        text-align: center;
        //coler属性は値が渡されれば値に応じて設定
        color: ${props => props.color ? props.color : "palevioletred"};
      `;
    
      // Wrapperはsectionタグ
      const Wrapper= styled.section`
            // スタイル
        padding: 4em;
        background: papayawhip;
      `;
    
      return (
        <Wrapper>
          <Title color="red">Hello!</Title>     {/*赤*/}
          <Title color="#4169e1">World</Title>  {/*青*/}
          <Title>styled-components</Title>      {/*ピンク*/}
        </Wrapper>
      );
    }
    
  • 이점
  • js 파일에서 직접 설명할 수 있습니다
  • 빠른 속도 제공
  • 스타일과 논리를 하나의 파일로 조합할 수 있기 때문에 구성 요소의 방향에 충실
  • 오류가 발생하여 즉시 장애 발견
  • 단점
  • 구성 요소인지 스타일인지
  • 작은 양식의 분배도 일일이 명명해야 한다
  • JSX가 커지면 가독성이 떨어지기 쉽다
  • CSS 프레임워크


    구성 요소와 스타일의 프로그램 라이브러리를 제공합니다.

    tailwind CSS


    https://tailwindcss.com/
    sample.tsx
    const App = () => {
    return (
    <div className="md:flex space-x-4 text-white">
      <button className="bg-blue-400">Apply</button>
      <button>Cancel</button>
    </div>
    )}
    
  • 이점
  • 는 유틸리티 우선 CSS이며, CSS 파일을 새로 만들지 않아도 된다
  • 내연 스타일과 달리 위류, 스펀지형
  • 에도 대응할 수 있다
  • js 파일에서 직접 설명할 수 있습니다
  • 속도가 빨라진다
  • 스타일과 논리를 하나의 파일로 조합할 수 있기 때문에 구성 요소의 방향에 충실
  • PurgeCSS에서 사용되지 않는 불필요한 범주를 제거하여 번들 크기를 줄임
  • CSS 모델스에서도 @apply 조합을, CSS-in-JS에서도 twin을 사용했다.마크로와 조합 가능
  • 편리한 라이브러리
  • https://daisyui.com/
  • 단점
  • 학습 비용이 약간 높음
  • 복잡한 스타일은 구별하기 어렵다
  • UI 라이브러리


    material UI


    https://mui.com/components/buttons/#color
    <Button variant="contained" color="success">
      Success
    </Button>
    
  • 이점
  • CSS
  • 설명 안 함
  • 자주 사용하는 모드(모드, 버튼, 메뉴 등) 등이 미리 준비되어 있어 편리하다
  • 스타일도 쉬워
  • 단점
  • 쓰기 방식이 독특하고 학습 비용이 높음
  • 세부적인 맞춤형 구성이 불가능
  • 일반적인 디자인이 됨
  • Chakra UI


    https://chakra-ui.com/docs/components/form/button#composition
    chakra.tsx
    <Button
      size='md'
      height='48px'
      width='200px'
      border='2px'
      borderColor='green.500'
    >
      Button
    </Button>
    
  • 이점
  • CSS
  • 설명 안 함
  • 자주 사용하는 모드(모드, 버튼, 메뉴 등) 등이 미리 준비되어 있어 편리하다
  • 스타일도 쉬워
  • 단점
  • 쓰기 방식이 독특하고 학습 비용이 높음
  • 세부적인 맞춤형 구성이 불가능
  • 일반적인 디자인이 됨
  • SCSS x BEM


    사전 프로세서로 사용된 Sass를 설명하겠습니다.Sass가 자주 주는 디자인 기법에는 BEM이 있다.이 두 그룹이 묘사하기에는 좀 지루하지만 이름 충돌을 피하면서 보수적인 스타일을 묘사할 수 있다.
    그러나 구성 요소 가이드에 있어서는 적합하지 않다고 생각합니다.즉, 구성 요소가 가리키는 방향을 이용하지 않고 '}' 스타일에 직접 맞추면 SCSS x BEM은 매우 좋은 수법이다.그러나 구성 요소를 중심으로 하는 경우 모든 위젯(소단위)이 스타일을 닫고 설명하기 때문에 이름의 충돌이 발생하기 어렵다.
    이 때문에 BEM과 SCSS는 오히려 지루해 보이고 명명 시간과 기술량이 늘어나 여분의 시간이 필요하다.
    결과적으로 리액트에서는 너무 사용하지 않는 것이 좋다고 생각합니다.
    sample.scss
    .article-list {
      width: 100%;
      &__article-title {
        font-size: 20px;
      }
    }
    

    뭐가 좋을까?


    리액트에서 구성 요소 방향으로 디자인(Atomic 디자인 등)한다면 UI 블라인드(Chakra UI 등)를 활용하면서 Tailwind CSS를 활용하는 것이 현 상황에 가장 적합하다는 게 제 견해입니다.
    이유는 다음과 같다.
  • class명 등을 명명하지 않아도 된다
  • 라이브러리를 활용하면서 세부적인 조정 가능
  • 스타일도 한 파일에 설명할 수 있음
  • 1점의class명을 고려할 필요가 없다. 그 이름과 같다.이름을 고려하지 않기 때문에 명명 규칙에 걸리는 시간과 시간을 절약하여 양식을 정할 수 있다.또한 css와 html의class명을 결합하면 구성 요소 방향에 필요하지 않습니다.하나의 파일은 스타일과 라벨을 실현할 수 있는데, 나는 이것이 구성 요소를 향한 진실한 자세라고 생각한다.
    두 번째도 그 이름과 같다.TailwindCSS는 실용 프로그램이라고는 하지만 패딩 설정, 술집 스타일, 스마트폰 등 스펀지 대응 방법 등을 상세히 기술할 수 있다.
    세 번째는 CSS 파일이 분리되지 않아도 되고 나타나는 속도도 빠르고 파일 수도 줄어들기 때문이다.나는 보수주의에 충실할지 고민 중이다.

    최후


    잘못된 점이 있으면 지적해 주십시오.

    참고 자료


    https://zenn.dev/chiji/articles/b0669fc3094ce3
    https://qiita.com/Takazudo/items/5180f5eb6d798a52074f

    좋은 웹페이지 즐겨찾기