无法使用 OnClick 更改背景颜色
Cannot change background color with OnClick
我正在构建一个小型应用程序,它是 https://emergencycompliment.com 使用 ReactJS 功能组件(实际上目前只有 1 个)的模型。我已经实现了一个在按钮的 OnClick 上调用的函数,并且应该随机化一个赞美来显示和改变背景的颜色。
这是我构建的(React 和 CSS)
import React, {useState}from "react"
import "./App.css"
function App() {
const [compliment, setCompliment] = useState("Hello")
const [color, setColor] = useState("lightblue")
const compliments = [
"You're pretty",
"You're smart",
"You're test1",
"You're test2",
"You're nice",
"You're test3"
]
function giveCompliment() {
let item = compliments[Math.floor(Math.random() * compliments.length)];
setCompliment(item)
setColor("green")
}
return (
<div className="App">
<header className="App-header" style={{backgroundColor: {color}}}>
<div className="centered">
<p>
{compliment}
</p>
<button className="button" onClick={giveCompliment}>Thanks!</button> <button className="button">MEH!</button>
</div>
</header>
</div>
);
}
export default App;
.App {
text-align: center;
}
.centered {
position: fixed;
top: 50%;
left: 50%;
}
.button {
background-color: Transparent;
background-repeat:no-repeat;
border: 5px solid #f5f5f5;
font-size: 20px;
color: whitesmoke;
width: 100%;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
我也尝试过使用 background-color={color} 但没有成功。出于某种原因,根据我的测试,我还没有发现该应用程序坚持 CSS(App 或 App-header)中定义的属性。我试图在 App 和 App-header 中设置颜色,没有任何区别。
如果我从 CSS 中删除该背景颜色属性,页面会变白并且颜色仍然没有变化。
我什至尝试对颜色值进行硬编码,但仍然不起作用。
我也尝试过使用十六进制值来表示颜色,但仍然无法正常工作。
我在这里遗漏了什么吗?
使用这个
onClick={()=> giveCompliment()}
运行 你刚才的代码。
useState 中声明的颜色是一个字符串,而不是 object。
在 header 标签上,移除颜色周围的花括号,如下所示:
< header className="App-header" style={{backgroundColor: color}} >
有效!
我正在构建一个小型应用程序,它是 https://emergencycompliment.com 使用 ReactJS 功能组件(实际上目前只有 1 个)的模型。我已经实现了一个在按钮的 OnClick 上调用的函数,并且应该随机化一个赞美来显示和改变背景的颜色。
这是我构建的(React 和 CSS)
import React, {useState}from "react"
import "./App.css"
function App() {
const [compliment, setCompliment] = useState("Hello")
const [color, setColor] = useState("lightblue")
const compliments = [
"You're pretty",
"You're smart",
"You're test1",
"You're test2",
"You're nice",
"You're test3"
]
function giveCompliment() {
let item = compliments[Math.floor(Math.random() * compliments.length)];
setCompliment(item)
setColor("green")
}
return (
<div className="App">
<header className="App-header" style={{backgroundColor: {color}}}>
<div className="centered">
<p>
{compliment}
</p>
<button className="button" onClick={giveCompliment}>Thanks!</button> <button className="button">MEH!</button>
</div>
</header>
</div>
);
}
export default App;
.App {
text-align: center;
}
.centered {
position: fixed;
top: 50%;
left: 50%;
}
.button {
background-color: Transparent;
background-repeat:no-repeat;
border: 5px solid #f5f5f5;
font-size: 20px;
color: whitesmoke;
width: 100%;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
我也尝试过使用 background-color={color} 但没有成功。出于某种原因,根据我的测试,我还没有发现该应用程序坚持 CSS(App 或 App-header)中定义的属性。我试图在 App 和 App-header 中设置颜色,没有任何区别。 如果我从 CSS 中删除该背景颜色属性,页面会变白并且颜色仍然没有变化。 我什至尝试对颜色值进行硬编码,但仍然不起作用。 我也尝试过使用十六进制值来表示颜色,但仍然无法正常工作。
我在这里遗漏了什么吗?
使用这个
onClick={()=> giveCompliment()}
运行 你刚才的代码。 useState 中声明的颜色是一个字符串,而不是 object。 在 header 标签上,移除颜色周围的花括号,如下所示:
< header className="App-header" style={{backgroundColor: color}} >
有效!