2017-02-22 1 views
1

더 나은 해결 방법을 찾을 수 없습니다. 지금은보고 된 페이지 사용자에 따라 어떤 스타일을해야 모든 구성 요소에 theme 소품을 통과 들어React prop 값에 따라 Sass 변수를 사용하여 React 구성 요소 테마

$colors: (
    dark: (
     theme1: #0096dc, 
     theme2: #eb8200, 
     … 
    ), 
    … 
); 

:

vars.scss : 나는 변수와 말대꾸-파일이 있습니다.

<div className={styles[`button${theme ? `-${theme}` : ``}`]}>{children}</div> 

을하고 말대꾸에서 내가 할 : 반작용에서 나는 다음과 같이 클래스 이름을 구축

@import 'vars'; 

.button{ 
    /* basic styles */ 
    font-size: 14px; 
    border: 1px solid; 

    @each $theme, $color in map-get($colors, dark) { 
     &-#{$theme} { 
      @extend .button; 
      border-color: $color; 
      color: $color; 
     } 
    } 
} 

하지만 이러한 코드를 내가에 따라 스타일 요소에 필요한 모든 시간을 배치해야하기 때문에이 절대적으로 불편 테마.

webpack에서 테마로 사용할 변수가있는 다른 파일을로드하는 방법에 대한 해결책이 있지만, redux에서 theme prop를 수신하므로 webpack은 해당 소품에 액세스 할 수 없습니다.

뿐만 아니라, 반응 성분에서 저음으로 속성을 전달하는 해결책을 찾을 수 없습니다. 맞은 편.

sass에서 가져 오기에서 변수를 사용할 방법이 없습니다. 아직 구현되지 않았습니다.

불행히도 현재 프로젝트에서 CSS-in-JS 방식을 사용할 수 없습니다.

더 나은 방법을 찾으려면 도와주세요.

답변

1

나는 그것을 무국적 기능 구성 요소로 만들 것입니다.

function BrightBox(props){ 
    <div className={styles[`button${theme ? `-${theme}` : ``}`]}> 
    {props.children} 
    </div> 
} 

그런 다음 가져 와서 사용하십시오. 테마를 전달할 필요가 없습니다.

{user.notice ? 
    <BrightBox> 
    there are {user.notice.issues.size} outstanding issues! 
    </BrightBox> 
: null 
} 
+0

나는이에 만들 것이다 유일한 다른 제안은'theme'에 액세스하기위한 (https://facebook.github.io/react/docs/context.html)의 컨텍스트 반응]를 사용하여 조사하는 것 소품을 사방에 전달하는 대신 –

+0

그리고 누군가가 Context에 관해서 실험적 API 만 있다고 말하기 전에 : https://twitter.com/dan_abramov/status/749715530454622208 –

+1

테마 색상을 사용해야 할 때마다 예제를 통해 루프를 웅크 리고 없애는 데 도움이되는 방법 ? 좋아요, 나는 문맥을 사용할 수 있습니다. 하지만 나는 그 소품을 전혀 없애려고합니다! 나는 다음과 같이 쓰고 싶다.

{children}
그러나 sass는 테마에 따라 $ theme-color 변수를 사용해야한다. '.button { font-size : 14px; 테두리 : 1 픽셀 단색 $ theme-color; 색상 : $ theme-color; }' 여기'$ theme-color'는'theme' prop에 따라 적재되어야합니다. – seleckis