Как написано в документах :
В дереве визуализации все стилевые компоненты будут иметь доступ к предоставленной теме
и only them!
Это означает, что ваши "нормальные" компоненты не получат объект темы в своих объектах.Мне понадобилось некоторое время, чтобы получить это.Они могли бы написать это немного лучше в документации.
Themeprovider использует response-context api , что означает, что все, что вы добавите туда, будет доступно в this.context.yourVaribaleName ине в реквизите это две разные вещи. (дальнейшее и правильное использование см. В официальном реактивном документе для контекста api (предыдущая ссылка))
Итак, в компоненте страницы вы просто делаете:
const Button = styled.button`
font-size: 1em;
color: ${props => props.theme.main};
border: 2px solid ${props => props.theme.main};
`;
class Page extends React.Component {
render(){
return(<Button>Normal</Button>);
}
}
(тема props.the в стилевом компоненте не означает, что компоненты, в которых вы будете использовать стилевой компонент, также имеют это в своих реквизитах)
ИЛИ
Если вы хотите, чтобы ваш объект темы находился за пределами стилизованного компонента, в подпрограммах «обычных» компонентов вы должны использовать withTheme HOC.См. документы . (как упоминалось в предыдущем ответе )