javascript - 如何在 Gatsby 中的全局 CSS onclick 之间切换?
问题描述
我正在盖茨比建立一个作品集网站,随着我在插图和设计方面的工作越来越多,我希望根据用户通过点击进行的选择来提供多种设计选项来展示该作品。我发现了一些类似的问题,但没有一个是专门针对 Gatsby 的。
我正在使用样式化组件来创建布局,所以在我看来,只需通过一个按钮在多个全局样式表(带有字体、颜色等)之间交换就可以了,所以布局保持不变,但我老实说,我不确定如何去做,因为我在 Gatsby 和 Javascript 方面都是初学者。
提前致谢!
解决方案
给定一个简单的<Layout>
结构,如:
import React from "react"
import { createGlobalStyle } from "styled-components"
const GlobalStyle = createGlobalStyle`
body {
color: ${props => (props.theme === "purple" ? "purple" : "white")};
}
`
export default function Layout({ children }) {
return (
<React.Fragment>
<GlobalStyle theme="purple" />
{children}
</React.Fragment>
)
}
您可以通过添加布尔运算符来轻松地将onClick
事件附加到children
以切换您的<GlobalStyle>
,例如:
export default function somePage(){
const [defaultStyles, setDefaultStyles]=useState(false);
const handleChange=()=>setDefaultStyles(!defaultStyles)
return <Layout defaultStyles={defaultStyles}>
<h1 onClick={handleChange}> Click me to toggle the global styles</h1>
</Layout>
}
基本上,您正在创建一个布尔状态(最初设置为false
)以在默认样式之间进行更改。该状态的结果(通过单击 切换<h1>
)将向上发送到您的<Layout>
so,那里:
import React from "react"
import { createGlobalStyle } from "styled-components"
const GlobalStyle = createGlobalStyle`
body {
color: ${props => (props.theme === "purple" ? "purple" : "white")};
}
`
export default function Layout({ children, defaultStyles }) {
return (
<React.Fragment>
{defaultStyles && <GlobalStyle theme="purple" />}
{children}
</React.Fragment>
)
}
&&
运算符只会在is<GlobalStyle>
时渲染。根据您的需要调整它或在需要时添加三元条件。defaultStyles
true
推荐阅读
- python - 使用 Python 搜索 Lua 文件中的所有函数调用
- python - pytest_sessionstart/finish 显示 AttributeError:“会话”对象没有属性“结果”
- angular - VSCode Typescript:在JSON数组中打开括号后防止换行
- javascript - Remove css class from element when reCAPTCHA is successful - Nextjs
- ruby-on-rails - 具有一种关联类型的 Rails 模型自定义验证
- javascript - 如何让我的客户在 goorm 上与我的服务器 API 对话?
- html - 如何在 safari iphone 的新窗口中打开网址
- c++ - 一个计算文件中元音和单词的 C++ 程序
- javascript - Google Apps 脚本日期转换
- javascript - MongooseError:操作 `muted-members.insertOne()` 缓冲在 10000 毫秒后超时