2017-10-03 4 views
1

을 렌더링합니다. 테마 변수를 사용하여 스타일을 변경하는 것 이상을해야합니다. 예 :이 같은 props에서 theme 객체를 사용하려고스타일이 적용된 구성 요소, 사용 테마 변수에 나는 우리가이 같은 테마 변수를 사용할 수 있다는 것을 알고

if (theme.dir === 'rtl') 
    do some stuff more in render! 

:

const {theme} = this.props; 
if (theme.dir === 'rtl') 
    do some stuff more in render! 

그러나 theme 소품은 정의되지 않습니다.

theme 부모로부터 전달 된 객체 <ThemeProvider/>을 사용할 수 있습니까? 전 세계적인 상태를 사용하고 싶지 않습니다.

답변

3

해결책을 찾았습니다. Here은 문서입니다.

는 이전에 나는이 같은 일을했다 :

import React from 'react'; 
import PropTypes from 'prop-types'; 
import styled from 'styled-components'; 


class Component extends React.Component { 

    render() { 
    const { 
     theme 
    } = this.props; 

    console.log('Current theme: ', theme); // Gets undefined 

    ... 

    return (
     ... 
    ) 
    } 

} 

export default Component; 

내가이 변경 :

import React from 'react'; 
import PropTypes from 'prop-types'; 
import styled, {withTheme} from 'styled-components'; 


class Component extends React.Component { 

    render() { 
    const { 
     theme 
    } = this.props; 

    console.log('Current theme: ', theme); // Gets theme object 

    ... 

    return (
     ... 
    ) 
    } 
} 

export default withTheme(Component); 
+0

나는 당신의 초기 질문을 오해했습니다. 좋은 찾기 (Y) –

0

스타일이 좋아 보이지 않습니다. 테마 구성 요소를 사용하면 테마에 쉽게 액세스 할 수 있습니다. 당신이 어쩌면 React context 또는 다른 전역 설정을 사용하고자하는 것처럼 보입니다. ThemeProvider에서 스타일이 아닌 다른 것으로 테마에 액세스하면 스타일이 지정된 구성 요소의 내부에 액세스하게됩니다.

+0

나는 스타일 - components''의 내부에 접근을 시도하지만 유용한 개체를 찾을 수 없습니다. – Ahmad

+0

그렇습니다. I. 이렇게하기위한 공개 API 또는 찾기 쉬운 개인 API가없는 것 같습니다. 그래서 다른 해결책을 제안했습니다. 다르게 생각하면 효과가 있습니다. 현재 CSS 스타일링 규칙에 CSS가 아닌 로직, 위치 지정 등을 알려주고있는 것처럼 보입니다. 다른 방법으로 컨텍스트/전역 상태에서보다 일반적인 변수를 유지하려고하면 _it_가 스타일 지정 규칙뿐만 아니라 그 밖의 모든 것. 'context.direction'은 폰트 방향과 로고 배치 등을 결정할 수 있습니다. – tenor528