我遇到了一个“问题”,这让我觉得我为我想要的东西选择了错误的堆栈。我对 React 和 Typescript 很陌生,但我想知道是否有人也知道以下方法。
主题.ts
import { createGlobalStyle } from "styled-components"
import { ThemeType } from "../types/theme"
export const lightTheme = {
background: "#F2F3EF",
text: "#252524",
}
export const darkTheme = {
background: "#1C282B",
text: "#F2F3EF",
}
export const GlobalStyles = createGlobalStyle<{ theme: ThemeType }>`
body {
margin: 0;
margin-left: 300px;
background: ${({ theme }) => theme.background};
color: ${({ theme }) => theme.text};
font-family: Tahoma, Helvetica, Arial, Roboto, sans-serif;
}
`
样式.ts
import { css } from "astroturf"
import { useTheme } from "styled-components"
const theme = useTheme()
const styles = css`
.navContainer {
width: 300px;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.themeToggle {
position: absolute;
bottom: 0;
text-align: left;
padding: 15px;
}
.logo {
padding: 20px;
}
.menuItems {
a {
text-decoration: none;
display: block;
padding: 5px;
}
a.light:hover {
background-color: ${({ theme }) => theme.background};
}
a.dark:hover {
background-color: ${({ theme }) => theme.background};
}
}
`
export default styles
我收到以下错误消息,这确实有意义
无法将插值解析为值、css 返回的类名或样式化组件。所有插值样式的组件必须在同一个文件中,并且值必须在编译时静态确定
我正在使用 postcss 运行 webpack,但也尝试使用样式组件中的主题。最终目标是使用拨动开关将主题从亮/暗更改,但我只需要一些关于我应该采取什么方法的指导。显然,用 astroturf 为 postcss 实现 css-in-js 将会对我使用主题的方式产生问题,但我想在我把它撕掉之前问你们。
可能有一个我缺少的简单解决方案。我尝试只导入变量 light 和 dark,然后尝试在我的 css 字符串中使用这些变量,但这也不起作用。
提前致谢