目标
根据悬停过程中的值更改“评级”(material-ui组件)的颜色。例如,如果我将鼠标悬停在第一颗星星上,颜色就会变成红色,如果在第五颗星星上,那么颜色就会变成绿色。
我试图制作一个自定义组件,该组件会在悬停时改变颜色,就像这样-
Another way Using Window function:
但是它会更改所有图标的颜色。
任何人都可以指导我,如何根据我选择或悬停的值来更改等级颜色中的特定图标。
答案 0 :(得分:3)
您可以使用动态样式(Overriding styles with classes)
const useStyles = makeStyles({
root: {
// ...
},
'icon-1': { color: 'red' },
'icon-2': { color: 'coral' },
'icon-3': { color: 'orange' },
'icon-4': { color: 'skyblue' },
'icon-5': { color: 'green' }
});
export default function HoverRating() {
// ...
return (
<div className={classes.root}>
<Rating
classes={{
iconHover: classes[`icon-${Math.ceil(hover)}`]
}}
//...
/>
...
</div>
);
}
答案 1 :(得分:0)
我为需要声明状态的打字稿人提供了答案。
https://codesandbox.io/s/ratings-vksqc?file=/demo.tsx
<div className={classes.root}>
<Rating
name="hover-feedback"
value={value}
precision={1}
onChange={(event, newValue) => {
console.log(event, "This is th e event");
setValue(newValue);
switch (true) {
case newValue <= 1: {
setIconFilled(classes.iconFilled1);
break;
}
case newValue <= 2 && newValue > 1: {
setIconFilled(classes.iconFilled2);
break;
}
case newValue <= 3 && newValue > 2: {
setIconFilled(classes.iconFilled3);
break;
}
case newValue <= 4 && newValue > 3: {
setIconFilled(classes.iconFilled4);
break;
}
case newValue > 4: {
setIconFilled(classes.iconFilled5);
break;
}
}
}}
onChangeActive={(event, newHover) => {
switch (true) {
case newHover <= 1: {
setIconHover(classes.iconHover1);
break;
}
case newHover <= 2 && newHover > 1: {
setIconHover(classes.iconHover2);
break;
}
case newHover <= 3 && newHover > 2: {
setIconHover(classes.iconHover3);
break;
}
case newHover <= 4 && newHover > 3: {
setIconHover(classes.iconHover4);
break;
}
case newHover > 4: {
setIconHover(classes.iconHover5);
break;
}
}
}}
defaultValue={2}
icon={<FiberManualRecordIcon fontSize="inherit" />}
classes={{
iconFilled: iconFilledVar,
iconHover: iconHoverVar
}}
/>
</div>