reactjs - 如何使用状态更改对按钮单击做出反应的颜色
问题描述
我已经设置状态来改变我的背景颜色
const [bgClr, setBgClr] = useState('white');
需要更改背景颜色的按钮是
<Button
onClick={AnnualHandler}
variant="outline-light"
style={{ background: {bgClr} }}>
<div
className="pt-3 pb-3 ml-3 mr-3"
style={{ background: '#f8f9fa' }}>
<h4 style={{ color: 'var(--main)' }}>
<b>$ 15</b>
</h4>
</div>
</Button>
处理程序是
const AnnualHandler = () => {
setBgClr('yellow');
console.log(bgClr);
};
但是在点击时,背景颜色没有改变。这里应该使用 useEffect 吗?
解决方案
代码中的主要问题是将bgClr
值设置为按钮背景的方式。
<Button style={{ background: {bgClr} }}>
不要那样做。像这样直接设置bgClr
为Button即可。
<Button style={{ background: bgClr }}>
笔记 :-
const AnnualHandler = () => {
setBgClr('yellow');
console.log(bgClr);
};
上面的代码片段向我们展示了您正在尝试在setBgClr
运行后获取更新的状态。但它不会发生,因为 React 中的状态更新是异步的。这样即使将颜色更改为 ,您也将获得旧值yellow
。
资源 - https://reactjs.org/docs/state-and-lifecycle.html
完整代码
import { useState } from "react";
export default function App() {
const [bgClr, setBgClr] = useState("white");
const AnnualHandler = () => {
setBgClr("yellow");
};
return (
<button onClick={AnnualHandler} style={{ background: bgClr }}>
Change
</button>
);
}
Codesandbox - https://codesandbox.io/s/change-the-color-of-the-button-69327076-wpgyj?file=/src/App.js
推荐阅读
- android - 进度条未显示
- python - cv2 引发了我不知道的类型错误?
- android - 在 Jetpack Compose 中以不同的速度滚动多个列表
- javascript - 反应生命周期视频
- google-sheets-api - 有没有办法复制整个电子表格,只有值,没有公式/链接(谷歌表格)?
- python - 如何保存 django inlineformset 默认值
- java - 230. BST 中的第 K 个最小元素
- python-3.x - 'PYTHONPATH' 未被识别为内部或外部命令
- node.js - NestJS Monorepo 微服务 - 找不到模块“@work/contracts/dist/adresses”或其相应的类型声明
- reactjs - 如何使用顺风更改 rechart 饼图的大小和位置