이것은 최근까지 React 세계에서 해결 된 문제가 아니 었습니다.
저는 React 컴포넌트 라이브러리 인 ElementalUI의 관리자 중 한 명입니다. 지난 6-12 개월 동안 다양한 스타일링 방법을 시도해 왔습니다. (!) 당신이 이름을 짓고, 우리는 그것을 시도했습니다. (내 ReactNL keynote 동안 가장 인기있는 라이브러리에 대한 내 경험에 대해 이야기하고 그들이 고장난 곳)
문제는 현재의 스타일 라이브러리 중 어떤 것도 테마 지정 지원이 전혀 없다는 것입니다. 대부분 사용자 친화적 인 방식으로 해킹 할 수 있지만 구성 요소를 배포 할 때 원하는 것은 아닙니다. 맞습니까?
그래서 우리는 styled-components
을 만들었습니다. styled-components
은 많은 흥미로운 속성을 가지고 있으며, 그 중 하나는 테마가 라이브러리에 직접 내장되어 배포 가능한 구성 요소를 작성하기에 완벽한 선택임을 나타냅니다.
여기에 간단한 설명이 있지만, 모든 것을 설명하는 documentation을 살펴 보시기 바랍니다. 이 변수, Wrapper
는 지금 구성 요소 반응 당신이 렌더링 할 수
import React from 'react';
import styled from 'styled-components';
// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
:
// Use them like any other React component – except they're styled!
<Wrapper>
<Title>Hello World, this is my first styled component!</Title>
</Wrapper>

(있는 경우
이
는 styled-components
의 기본적인 사용법은 모습입니다 당신은 살아있는 놀이터가 될 이미지를 클릭하십시오.)
삽입 된 함수를 태그가 지정된 템플릿 리터럴에 전달하면 구성 요소에 전달 된 속성이 전달됩니다. 이 말은 소품에 적응할 수 있다는 것을 의미합니다 : 여기
import styled from 'styled-components';
const Button = styled.button`
/* Adapt the colors based on primary prop */
background: ${props => props.primary ? 'palevioletred' : 'white'};
color: ${props => props.primary ? 'white' : 'palevioletred'};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
, 우리는 당신이 다른 같은 primary
을 만들 수있는 Button
구성 요소 반응 만든 구성 요소 :
<Button>Normal</Button>
<Button primary>Primary</Button>

지금 온다 테마 측면. 의지에 상관없이, 그 ThemeProvider
내 상황에 얼마나 깊은 감사를 이제
import { ThemeProvider } from 'styled-components';
const theme = {
main: 'mediumseagreen',
};
ReactDOM.render(
<ThemeProvider theme={theme}>
<MyApp />
</ThemeProvider>,
myElem
);
어떤 스타일의 구성 요소 : 우리는 당신에 theme
을 전달하고 귀하의 응용 프로그램 (또는 응용 프로그램의 일부)를 포장 할 수 없습니다 ThemeProvider
라는 구성 요소를 내보낼 이 theme
을 소품에 삽입하십시오.
이것은 themable Button
은 다음과 같은 형태가 될 것이다
import styled from 'styled-components';
const Button = styled.button`
/* Color the background and border with theme.main */
background: ${props => props.theme.main};
border: 2px solid ${props => props.theme.main};
/* …more styles here… */
`;
이제 Button
은 통과 가져옵니다 theme
을하고 그 기반으로 스타일의 변경됩니다! (defaultProps
을 통해 기본값을 제공 할 수도 있습니다.)
이것이 바로 styled-components
의 요지이며 배포 가능한 구성 요소를 구축하는 방법에 도움이됩니다!
우리는 현재 WIP doc about writing third-party component libraries을 가지고 있으며, 체크 아웃을 권장합니다. 물론 정상적인 문서도 좋은 읽을 거리입니다. 우리는 모든 기반을 다 커버하려 했으니, 당신이 싫어하는 것이 있거나 생각하지 못한 것이 있으면 즉시 알려주십시오. 우리는 토론 할 것입니다!
styled-components
에 대한 다른 질문이 있으시면 언제든지 여기에 답장하거나 Twitter에 문의하십시오. (@mxstbr)
사용자 정의 구성 요소의 스타일을 어떻게 지정합니까? div 래퍼 만 사용 하시겠습니까? – MoeSattler
예, 저는 더 큰 구성 요소마다 스타일이 많은 구성 요소를 사용합니다. 이 같은 것을 : const Btn = styled.버튼 ' 스타일 : 여기; ' CONST 버튼 = (버팀대) => { 창 ( <щࣉ = {...} 소품>} {props.text ); } – mxstbr
구성 요소의 실제 스타일 결합을 어떻게 처리합니까? 예를 들어, 모든 버튼이 이제 5px 반경을 원한다면, 나는 모두에 들어가서 손을 바꾸어야합니다. 아니면 내가 틀린 글을 읽고 있니? 또는 미디어 쿼리, 어떻게 사용합니까? –