styled-components로 theme적용하기 with Typescript

2023. 2. 22. 23:52·React

1. styled.d.ts 파일을 만들어서 theme에 들어가는 속성 타입 정의

// src/styled.d.ts
import 'styled-components';

declare module 'styled-components' {
  export interface DefaultTheme {
    textColor: string;
    bgColor: string;
  }
}

 

2. theme.ts 파일 만들고 테마 값 선언

// src/theme.ts
import { DefaultTheme } from "styled-components";

export const lightTheme:DefaultTheme = {
  textColor: '#000',
  bgColor: '#fff'
}

export const darkTheme:DefaultTheme = {
  textColor: '#fff',
  bgColor: '#000'
}

 

3. 최상위 컴포넌트에서 theme-provider로 컴포넌트 감싸고 theme props 내려주기

// src/index.tsx
import { darkTheme, lightTheme } from "./theme";

import App from "./App";
import React from "react";
import ReactDOM from "react-dom/client";
import { ThemeProvider } from "styled-components";

const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
  <React.StrictMode>
    <ThemeProvider theme={lightTheme}>
      <App />
    </ThemeProvider>
  </React.StrictMode>
);

 

4. 하위 컴포넌트에서 props.theme로 받아서 사용하면 된다. 

import styled from "styled-components";

const Wrapper = styled.div`
  display: flex;
  width: 100%;
  align-items: center;
  text-align: center;
  height: 500px;
  background-color: ${(props) => props.theme.bgColor};
`;

const Text = styled.span`
  width: 100%;
  flex: 1;
  font-size: 30px;
  color: ${(props) => props.theme.textColor};
`;

const App = () => {
  return (
    <Wrapper>
      <Text>test</Text>
    </Wrapper>
  );
};

export default App;

'React' 카테고리의 다른 글

styled-components 전역 스타일링 (Global style)  (0) 2023.02.24
기존 CRA프로젝트에 typescript 템플릿 추가하기  (0) 2023.02.22
styled-components 기본 문법  (0) 2023.02.22
styled-components, emotion 비교  (0) 2023.02.22
redux-toolkit  (0) 2023.02.20
'React' 카테고리의 다른 글
  • styled-components 전역 스타일링 (Global style)
  • 기존 CRA프로젝트에 typescript 템플릿 추가하기
  • styled-components 기본 문법
  • styled-components, emotion 비교
ssund
ssund
  • ssund
    ssund의 기술블로그
    ssund
  • 전체
    오늘
    어제
    • TECH (82)
      • Next.js (8)
      • React (25)
      • Vite (1)
      • javascript (17)
      • CSS (6)
      • CS (10)
      • AWS (0)
      • Jest (1)
      • CI|CD (0)
      • 알고리즘 (8)
      • Tools (1)
      • Tips (5)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      call signatures
      app-router
      Array.sort()
      global-style
      reat-head
      함수와 메서드차이
      React
      redux
      타입스크립트
      nextjs
      TypeScript
      JavaScript
      styled-components
      커머스프로젝트
      react state management
      웹브라우저구성
      서버컴포넌트
      배열요소순서
      git배포
      theme-provider
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    ssund
    styled-components로 theme적용하기 with Typescript
    상단으로

    티스토리툴바