본문 바로가기

code states

[React] Custom Component 2

Styled Components 란 ?

CSS in JS 개념(컴포넌트 단위에 캡슐화)이 대두되면서 나온 라이브러리이다.

CSS in JS 를 사용하면 CSS도 Js 안에 넣어줄 수 있기 때문에  HTML , JS , CSS를 묶어서 하나의 JS파일안에 컴포넌트 단위로 개발할수 있게 된다! (개쩌러) CSS in JS 중에서도 다른 라이브러리도 있지만 가장 인기있다고 하는 Styled Components의 사용법에 대해 알아보자.

 

Styled Components  사용법! 

npm install --save styled-components

로 설치를 해준다.  그리고 Styled Componets는 package.json에

{
  "resolutions": {
    "styled-components": "^5"
  }
}

이 코드를 추가하는것이 좋은데 왜냐면 여러 버전의 Styled Componets가 설치되어 발생하는 문제를 줄여주기 때문이다! 

마지막으로 

import styled from "styled-components"

사용할 파일을 불러와주면 준비는 끝이다! 

 

Styled Components  문법! 

컴포넌트 만들기

Styled Components 로 컴포넌트를 만드는 방법은 ES6의 Templete Literals 문법을 사용한다. 따옴표(" ")말고 백틱(``)를 사용해야 한다. 

컴포넌트 선언 후 styled.태그종류 할당하고 `안에 기존에 CSS작성하던 문법과 같이 스타일 속성을 작성해주고 만든 컴포넌트를 React 컴포넌트를 사용하듯이 리턴문 안에 작성해주면 렌더된다! (말로는 아주 쉽다)

 

import styled from "styled-components";

const RadiusButton = styled.button` 
// Styled Components로 컴포넌트를 만듬 
// styled는 원하는 스타일을 적용하기 위해서 사용됨
  border-radius: 10px; 
`;
// 컴포넌트 사용하듯이 
export default function App() { 
// export(내보내기) default 는 해당 모듈엔 개체가 하나만 있다는 말 
	return <RadiusButton>RadiusButton</RadiusButton>;
    }

컴포넌트 재활용 하기

컴포넌트 재활용 하기위해 컴포넌트를 선언하고 styled()에 재활용할 컴포넌트를 전달해주고 추가하고 싶은 스타일 속성을 작성해주면 된다! 

import styled from "styled-components";

const RadiusButton = styled.button` 
  border-radius: 10px; 
`;

  const BigRadiusButton = styled(RadiusButton)`
  padding: 10px;
  margin-top: 10px;
`; // 이렇게 재활용 가능 

const BigBlueRadiusButton = styled(BigRadiusButton)`
  background-color: blue;
`; // 재활용의 재활용 

export default function App() {
  return (
    <>
      <RadiusButton>Blue Button</RadiusButton>
      <br />
      <BigRadiusButton>Big Blue Button</BigRadiusButton>
      <br />
      <BigBlueRadiusButton>Big Red Button</BigBlueRadiusButton>
    </>
  );
}

Props 활용하기 

Styled Component로 만든 컴포넌트도 React 컴포넌트처럼 props를 내려줄 수 있다.
내려준 props값에 따라 컴포넌트 랜더링도 가능하다.
Styled Components는 템플릿 리터럴 문법( ${ } )을 사용하여 JavaScript 코드를 사용할 수 있다.
props를 받아오려면 props를 인자로 받는 함수를 만들어 사용하면 됩니다.

1) Props로 조건부 렌더링하기

삼항연산자로 조건부 렌더링할 수 있다. 

const Button = styled.button`
background: ${(props) => props.blue ? "blue" : "red"}`;

2) Props 값으로 렌더링하기

props의 값을 통째로 활용해서 컴포넌트 렌더링에 활용할 수 있다. 

const Button = styled.button`
background: ${(props) => props.color ? props.color : "red"}`;

<Button>Button</Button> // 버튼색 === red
<Button color="blue">ButtonA</Button> //버튼색 === blue
<Button color="pink">ButtonB</Button> //버튼색 === pink

여기서는 props.color가 없다면을 조건으로 쓰고있다.

꼭 삼향연산자가 아니라도 Js코드라면 무엇이든 사용할 수 있으니 원하는 값을 사용할 수 있게 만들면 된다.  ( && || 이런것도 가능)

 

전역 스타일 설정하기

전역 스타일 설정 방법은 먼저 Styled Components에서  createGlobalStyle 함수를 불러오면 된다.

그 다음에는 불러온 함수를 사용해 CSS 파일 적성하듯 설정하고 <GlobalStyle> 컴포넌트를 최상위 컴포넌트에서 사용하면

전역에 컴포넌트 스타일이 적용된다. 

import { createGlobalStyle } from "styled-components";
// createGlobalStyle 불러오기 

const GlobalStyle = createGlobalStyle`
	button {
		padding : 5px;
    margin : 2px;
    border-radius : 5px;
	} // 스타일 설정

function App() {
	return (
		<>
			<GlobalStyle />
			<Button>전역 스타일 적용하기</Button>
		</>
	);
} // 최상위 컴포넌트에서 사용

'code states' 카테고리의 다른 글

웹 표준과 웹 접근성  (0) 2023.01.03
React 상태관리!  (0) 2022.12.28
[React] Custom Component 1  (0) 2022.12.22
매력적인 재귀  (1) 2022.12.17
Rest API  (0) 2022.12.16