reactjs - reactjs中如何根据onclick改变头像颜色?
问题描述
我有材料 ui 头像,它从样式中获取颜色(粉红色/绿色)。当我需要根据 onclick 将颜色从粉红色更改为绿色时,就会出现问题。我试图保持颜色名称不变,但它不起作用,
import React from 'react';
import { withStyles } from '@material-ui/core/styles';
import { green, pink } from '@material-ui/core/colors';
import Avatar from '@material-ui/core/Avatar';
import FolderIcon from '@material-ui/icons/Folder';
import PageviewIcon from '@material-ui/icons/Pageview';
import AssignmentIcon from '@material-ui/icons/Assignment';
const styles = (theme) => ({
root: {
display: 'flex',
'& > *': {
margin: theme.spacing(1),
},
},
pink: {
color: theme.palette.getContrastText(pink[500]),
backgroundColor: pink[500],
},
green: {
color: '#fff',
backgroundColor: green[500],
},
});
class IconAvatars extends React.Component {
constructor(props) {
super(props)
this.state = {
color:""
}
}
render(){
console.log(this.state.color)
const {classes} = this.props;
return (
<div className={classes.root}>
<Avatar className={classes.pink} >
<div onClick=''>M</div>
</Avatar>
</div>
);
}
}
export default withStyles(styles)(IconAvatars)
使用此代码可以正常工作
<div className={classes.root}>
<Avatar className={classes.pink} >
<div onClick=''>M</div>
</Avatar>
</div>
但我想根据 onclick 将颜色从粉红色更改为绿色
解决方案
根据 onClick 事件设置状态并从类中动态解构适当的颜色
class IconAvatars extends React.Component {
constructor(props) {
super(props)
this.state = {
color:""
}
}
render(){
const {color} = this.state;
const {classes} = this.props;
const AvatarClass = classes[color] || classes.pink;
return (
<div className={classes.root}>
<Avatar className={AvatarClass} >
<div onClick={() => this.setState({color: 'green'})}>M</div>
</Avatar>
</div>
);
}
}
export default withStyles(styles)(IconAvatars);
推荐阅读
- python - 是否有结合`while`和`with`的Python结构?
- jquery - 如何使错误显示在您的输入下方
- sql - 在 CASE 语句中使用 INSERT INTO 时出错
- sql - 为什么必须在 IDENTITY_INSERT ON 时指定列?
- java - 避免在多线程代码中使用关闭标志
- jquery - 触发 jQuery UI 对话框取消操作时,父级中的按钮出现问题
- android - 如何从另一个类中的另一个方法更新ANDROID中的progressBar
- mysql - 如何在 mysql 或 php 脚本中更新基于依赖项的列?
- javascript - 下载文件后重定向并返回响应
- swift - 在 Xcode 中使用 MLMultiArray 作为 mlmodel 的输入