我想知道<ThemeProvider/>应该放在什么地方反应应用程序。
我会想出两种解决方案。
1,<ThemeProvider/>应该在“创建-反应-应用程序”工具创建的index.js或App.js文件等顶级根组件中使用“仅一次”。
2、<ThemeProvicer/>应该放在“每个反应成分的根”中。
为了澄清,我会给你举个例子。只有两个组件,‘红色’和‘蓝色’<div>标签。
1,<ThemeProvider/>使用“只有一次”
// 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 />
)
}// In './blue.js'
......
const Blue = styled.div`background: ${props => props.theme.subColor}`
export default function BlueDiv() {
return (
<Blue />
)
}// 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/>使用了“反应元件的每个根”。
// 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>
)
}// In './blue.js'
......
const Blue = styled.div`background: ${props => props.theme.mainColor}`
export default function BlueDiv() {
return (
<ThemeProvider theme={myTheme}>
<Blue />
</ThemeProvider>
)
}// 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 />
</>
)
}
}上面的代码可能有一些错误,但我希望这个例子能清楚地表达我的想法。
发布于 2019-05-27 09:53:03
我只使用过一次,在index.js内部。
如果您需要的话,也是添加一些全局样式的好地方。我将它们用于resetCSS (http://meyerweb.com/eric/tools/css/reset/)和一些baseCSS规则,如box-sizing等。
index.js
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')
);https://stackoverflow.com/questions/56310875
复制相似问题