Styled Components


Styled Components?



以前に反応器にcssを適用した場合、すべてのcssコードを記述して適用する別のページが作成されます.この場合、欠点は、簡潔に書き始めるとclassが多ければ多いほど時間が長くなり、繰り返しであれば同じようなことも起こります...簡単に言えば、一目瞭然ではありません.
この問題を解決するには、cssをページに配置するのではなく、機能とcssをコンポーネントに配置します.Styled-Componentsは、JavaScriptでcssを使用するのに役立つライブラリです.これをCSS in JSと呼びます.他のcss-in-jsにはemotion、springなどがあります.
cssファイルはコンポーネントにないため、cssをグローバルにオーバーラップさせないことができます.

1.特徴

  • Automatic critical CSS
    Styled Componentは、画面でレンダリングされた構成部品を追跡し、これらの構成部品にスタイルを自動的に挿入します.したがって、コードを適切に割り当てることで、ユーザがアプリケーションを使用する際に最小限のコードで画面を表示できるようにすることができる.

  • No class name bugs
    Styled Componentは独自のclassNameを生成します.これにより、classNameの重複またはエラーによるエラーを低減できます.

  • Easier deletion of CSS
    Styled Componentのすべてのスタイル属性は、特定の構成部品に関連付けられているため、構成部品を使用しなくなったために削除すると、スタイル属性も削除されます.

  • Simple dynamic styling
    これは、classNameを手動で管理する必要がなく、Reactのpropsまたはグローバル属性に基づいてコンポーネントにスタイル属性を付与する簡単で直感的です.

  • Painless maintenance
    継承スタイルから構成部品への属性を検索して他のCSSファイルを検索する必要がないため、コードが大きくなってもメンテナンスは難しくありません.

  • Automatic vendor prefixing
    既存のCSSを使用するスタイルプロパティを各構成部品に定義するだけです.その他はStyled Componentが処理します.

    Tagged Template Literals


    関数のパラメータは、Template Libralsを使用してグループ化および転送されます.この構文を使用して、Function、Number、Array、Objectなどを転送および実行できます.
    function transform(staticData, ...dynamicData) {
     	console.log(staticData); // ["Hi, ", " and I am ", "."]
       console.log(dynamicData);// ["Mygumi", 20]
    }
    transform`Hi, ${userName} and I am ${age}.`;
  • transform를 일반적인 함수 호출 방식인 transform() 이 아닌 transform` ` 형태이다.
    첫 번째 데이터에는 정적 데이터가 , 나머지 파라미터에는 동적데이터가 저장되어있다
    
    
    
     ## 2. 설치, 사용
     ```javascript
    npm install --save styled-components

    (1)基本文法

    import styled from "styled-components"; // styled-components 패키지에서 styled 함수를 임포트
    
    styled.button" 
     //<button> HTMOL 엘리먼트에 스타일 정의
    "
  • が応答素子造形の場合
    パラメータ伝達素子
  • として導入する.
    import styled from "styled-components";
    import Button from "./Button";
    
    styled(Button)`
      // <Button> React 컴포넌트에 스타일 정의
    `;

    (2) props


    スタイル属性:${props=>props.style?真時属性:偽時属性
    import React from "react";
    import styled from "styled-components";
    
    const StyledButton = styled.button`
      padding: 0.375rem 0.75rem;
      border-radius: 0.25rem;
      font-size: 1rem;
      line-height: 1.5;
      border: 1px solid lightgray;
    
      color: ${(props) => props.color || "grey"}; //props 칼라가 없으면 grey
      background: ${(props) => props.background || "white"};
    `;
    
    function Button({ children, color, background }) {
      return (
        <StyledButton color={color} background={background} Î>
          {children}
        </StyledButton>
      );
    }
    styled-conentsは素子のpropsを伝達して使用することができる.
  • 条件(支柱)&もしそうであれば
  • 条件(支柱)?真の場合:偽の場合は
  • 条件|...Propが渡されていない場合は、プリファレンスに従います.受信した場合は、指定した条件に従います.
    条件に応じて値を変更できます.
  • (3)extends:継承&拡張


    const構成部品名=styled(継承する構成部品)
    const Button = styled.button`
    `;
    const LongButton = styled(Button)`
    	//button을 상속받고, 속성을 추가할 수 있음
    `;

    (4)attrs属性の指定


    スタイル要素を宣言するときに、すぐにプロパティを選択できます.
    const PwInput = styled.input.attrs(props => ({
    	type : "password"
    }))
    
    const TextInput = styled.input.attrs(props => ({
    	type : "text"
    }))

    (5)禁忌事項


    renderでStyled componentを宣言しないでください.レンダリングのたびに要素が再作成されるためです.
    import React from 'react';
    import styled from 'styled-components';
    
    const AnyComponent = () => {
        // 절대 여기서 선언하면 안됩니다!
        const Button = styled.button`
            {button styles...};
        `;
    
        return (
            <Button>Bad!!!!</Button>
        );
    }
    
    return AnyComponent;

    ソース


    https://kimdabin.tistory.com/entry/Styled-Components-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC-Basic
    https://velog.io/@hwang-eunji/Styled-Components-%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8