首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在样式组件中“ThemeProvider”的最佳实践是什么?

在样式组件中“ThemeProvider”的最佳实践是什么?
EN

Stack Overflow用户
提问于 2019-05-26 05:23:23
回答 1查看 5.2K关注 0票数 4

我想知道<ThemeProvider/>应该放在什么地方反应应用程序。

我会想出两种解决方案。

1,<ThemeProvider/>应该在“创建-反应-应用程序”工具创建的index.jsApp.js文件等顶级根组件中使用“仅一次”。

2、<ThemeProvicer/>应该放在“每个反应成分的根”中。

为了澄清,我会给你举个例子。只有两个组件,‘红色’和‘蓝色’<div>标签。

1,<ThemeProvider/>使用“只有一次”

代码语言:javascript
复制
// In './red.js'
import React from 'react'
import styled from "styled-components"

const Red = styled.div`background: ${props => props.theme.mainColor}`

export default function RedDiv() {
    return (
        //NOT using ThemeProvider
        <Red />
    )
}
代码语言:javascript
复制
// In './blue.js'
......

const Blue = styled.div`background: ${props => props.theme.subColor}`

export default function BlueDiv() {
    return (
        <Blue />
    )
}
代码语言:javascript
复制
// In './App.js'
import React, { Component } from 'react'
import { ThemeProvider } from "styled-components"
import myTheme from "./myTheme
import Red from "./red"
import Blue from "./blue"

export default class App extends Component { 
    render() {
        return (
            //only used here just once
            <ThemeProvider theme={myTheme}>
                <>
                    <Red />
                    <Blue />
                </>
            </ThemeProvider>
        )
    }
}

2,<ThemeProvider/>使用了“反应元件的每个根”。

代码语言:javascript
复制
// In './red.js'
import React from 'react'
import styled, { ThemeProvider } from "styled-components"

const Red = styled.div`background: ${props => props.theme.mainColor} `

export default function RedDiv() {
    return (
        <ThemeProvider theme={myTheme}>
            <Red />
        </ThemeProvider>
    )
}
代码语言:javascript
复制
// In './blue.js'
......

const Blue = styled.div`background: ${props => props.theme.mainColor}`

export default function BlueDiv() {
    return (
        <ThemeProvider theme={myTheme}>
            <Blue />
        </ThemeProvider>
    )
}
代码语言:javascript
复制
// In './App.js'
import React, { Component } from 'react'
import Red from "./red"
import Blue from "./blue"

export default class App extends Component { 
    render() {
        return (
            <>
                // <ThemeProvider/>  is not used
                <Red />
                <Blue />
            </>
        )
    }
}

上面的代码可能有一些错误,但我希望这个例子能清楚地表达我的想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 09:53:03

我只使用过一次,在index.js内部。

如果您需要的话,也是添加一些全局样式的好地方。我将它们用于resetCSS (http://meyerweb.com/eric/tools/css/reset/)和一些baseCSS规则,如box-sizing等。

index.js

代码语言:javascript
复制
import { createGlobalStyle, ThemeProvider } from 'styled-components';
import theme from './styles/theme';
import resetCSS from './styles/resetCSS';
import baseCSS from './styles/baseCSS';
import { BrowserRouter as Router} from "react-router-dom";

const GlobalStyle = createGlobalStyle`
  ${resetCSS}
  ${baseCSS}
`;

React.DOM.render(
  <React.Fragment>
    <GlobalStyle/>
    <Router>
      <ThemeProvider theme={theme}>
        <App/>
      </ThemeProvider>
    </Router>
  </React.Fragment>
  ,document.getElementById('root')
);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56310875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档