reactjs - ReactJS 按钮在点击时改变颜色
问题描述
我在使用Material UI Buttons创建的 reactjs 中有 3 个按钮。
<>
<Button variant="contained">Button 1</Button>
<Button variant="contained">Button 2</Button>
<Button variant="contained">Button3</Button>
</>
当单击一个时,我怎样才能做到这一点,它会改变它的颜色(比如说蓝色),而其他的会重置为默认值?
解决方案
因为 React 使用 JSX,你可以将 javascript 放在你的 html 组件中。我们可以想象一个管理按钮的单一状态。
在您的组件中,您创建一个包含整数的状态
const [buttonSelected, setButtonselected] = useState(0);
我正在使用 react hook 语法,但它也取决于你的实现。
buttonSelected
是状态的当前值,setButtonselected
是改变状态的函数。当你调用它时,React 会重新渲染你的组件并改变 display 。
您现在可以在退货时添加点击功能
...
<Button variant="contained" onClick={() => setButtonSelected(1)}>Button 1</Button>
<Button variant="contained" onClick={() => setButtonSelected(2)} >Button 2</Button>
<Button variant="contained" onClick={() => setButtonSelected(3)}>Button3 </Button>
...
这将在您每次单击按钮时更改 buttonSelected 的值。
我们现在需要更改颜色,为此我们将使用 makeStyle,但还有其他方法可以做到这一点。
首先,在组件之外创建一个样式元素。
const useStyles = makeStyles((theme: Theme) =>
createStyles({
selected: {
background: 'blue',
},
default:{
background: 'default',
}
}
),
);
然后在你的组件中调用它
const classes = useStyles();
最后你可以根据值设置你想要的样式
...
<Button className={(buttonSelected === 1) ? classes.selected : classes.default} variant.....
<Button className={(buttonSelected === 2) ? classes.selected : classes.default} variant.....
<Button className={(buttonSelected === 3) ? classes.selected : classes.default} variant.....
...
这是一个三元运算符,相当于
if(buttonSelected === 1){
return classes.selected
} else {
return classes.default
}
它应该工作。您可以在react 的条件渲染和 react的样式中了解它
如果您有任何问题,请不要犹豫:)
推荐阅读
- javascript - 在 content-security-policy 中为内联样式使用 nonce 或 hash 值
- java - 共享数据库文件
- javascript - 在 HTML 中使用带有 JavaScript 的 libphonenumber
- c# - 如何在 C# 中向 DataGridView 添加行然后从数据库中加载数据
- python - 在网络图中获取直接边连接
- git - 将文件名重命名为旧名称会丢失 Git 中的历史记录
- javascript - 将 Service Worker 安装到 Angular 4 应用程序 - 无 Angular CLI
- c# - 从网页读取日期
- python - 运行 heroku local 和 python manage.py 有什么区别
- amazon-web-services - 如何更新托管在 Amazon S3 上的静态 html 网站