use*_*390 8 javascript typescript reactjs styled-components
我是 React 和 Typescript 的新手,我正在尝试将暗模式添加到我的项目中,我创建了 globalStyle 组件、Themes 组件并使用 Themeprovider。
我的 globalStyle 组件遇到问题:属性“body”不存在类型“DefaultTheme”
我的 globalStyles.tsx 代码如下:
import { createGlobalStyle} from "styled-components"
export const GlobalStyles = createGlobalStyle`
body {
background: ${({ theme }) => theme.body};
color: ${({ theme }) => theme.text};
font-family: Tahoma, Helvetica, Arial, Roboto, sans-serif;
transition: all 0.50s linear;
}`
Run Code Online (Sandbox Code Playgroud)
我的主题.tsx:
export const lightTheme = {
body: '#FFF',
text: '#363537',
background: '#363537',
}
export const darkTheme = {
body: '#363537',
text: '#FAFAFA',
background: '#999',
}
Run Code Online (Sandbox Code Playgroud)
以及我在 App.tsx 上的 Themeprovider 代码:
<ThemeProvider theme={this.state.theme === 'light' ? lightTheme : darkTheme}>
<>
<GlobalStyles/>
<ul className='tickets'>
{filteredTickets.map((ticket) => (
<li key={ticket.id} className={ticket.toggle ? 'expand' : 'ticket'}>
<h5 className='title'>{ticket.title}</h5>
<button onClick={() => this.onHide(ticket.id)}>Hide</button>
<p className={ticket.toggle ? 'show-more' : 'content'}>{ticket.content}</p>
<button onClick={()=> this.onToggle(ticket.id)}>{ticket.toggle ? 'Show less' : 'Show more'}</button>
<footer>
<div className='meta-data'>By {ticket.userEmail} | { new Date(ticket.creationTime).toLocaleString()}</div>
</footer>
</li>))}
</ul>
</>
</ThemeProvider>
Run Code Online (Sandbox Code Playgroud)
我做错了什么以及为什么在 globalStyles.tsx 上无法识别 theme.body 和 theme.text ?
谢谢 !
jn_*_*pdx 19
createGlobalStyle可以接受主题的形状:
createGlobalStyle<{theme: ThemeType}>
Run Code Online (Sandbox Code Playgroud)
从styled-components文档中,有这个(https://styled-components.com/docs/api#typescript):
declare module 'styled-components' {
export interface DefaultTheme {
borderRadius: string;
colors: {
main: string;
secondary: string;
};
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我建议您为您的主题设置一个接口,如上所述,然后将其传递createGlobalStyle到ThemeType
| 归档时间: |
|
| 查看次数: |
13840 次 |
| 最近记录: |