Styled-components 공부(React)

Styled-components를 사용하여 React에서 사용자 정의 버튼을 만들려고했습니다.



CODESANDBOX 를 사용한 간단한 샘플은 이쪽.



Custom Button 만들기



App.js

import CustomButton from "./components/CustomButton.component";

function App() {
  return (
    <div className="App">
      <h1>Let's Build Custom Buttons!</h1>

      <p>Basic Button Theme</p>
      <CustomButton onClick={() => {console.log('You have become a member!!')}}> Become a member </CustomButton>

      <p>Inverted Theme</p>
      <CustomButton inverted> Subscribe </CustomButton>

      <p>Large Size</p>
      <CustomButton large> Styled-components </CustomButton>
    </div>
  );
}


절차



먼저 Custom Button 라는 구성 요소를 만듭니다.
내용은 아래와 같이・・・.

CustomButton.component
import React from "react";

import { ButtonContainer } from "./CustomButton.styles";

const CustomButton = ({ children, ...otherProps }) => {
  return <ButtonContainer {...otherProps}> {children} </ButtonContainer>;
};

export default CustomButton;
ButtonContainer는 styled-components의 스타일링 이름입니다.
  • 우선 버튼의 명칭을 {children} 로 받습니다.
  • 기타를 ...otherProps 로 하여 여러 Props를 받을 수 있도록 합니다(ES6 문법)

    이 otherProps로 받은 속성은 어떻게 사용됩니까?
    이것은 아래와 같습니다.

    CustomButton.styles
    import styled, { css } from "styled-components";
    
    const invertedStyles = css`
      background-color: #065fd4;
      color: #fff;
    `;
    
    const largeStyles = css`
      width: 200px;
      height: 80px;
      font-size: 18px;
    `;
    
    const getStyles = props => {
      if (props.inverted) {
        return invertedStyles;
      }
    
      if (props.large) {
        return largeStyles;
      }
    };
    
    export const ButtonContainer = styled.button`
      width: 150px;
      height: 50px;
    
      background-color: #ffffff;
      color: #065fd4;
    
      border: 1px solid #065fd4;
      font-size: 14px;
    
      outline: none;
      cursor: pointer;
    
      ${getStyles}
    `;
    

    베이스가 되는 ButtonContainer 로 버튼의 스타일링을 실시해, ${getStyles} 로 Props의 내용에 의해 스타일링을 전환하도록 하고 있습니다.

    만약 props가 inverted라면 invertedStyles를 적용시키는 느낌이군요.
  • 좋은 웹페이지 즐겨찾기