Material UI 和 ReactJS,如何使用 withStyles 为选定的 ListItem 设置样式?
Material UI and ReactJS, how to style a selected ListItem using withStyles?
我想更改所选 ListItem
的样式,如 this codesandbox 所示。
在沙盒中,我使用全局 css 样式表,但我想使用 withStyle technique.
我该怎么做?
我应该使用什么 className
来定位 selected ListItem?
如果您使用的是无状态功能组件,则应使用 makeStyles()
而不是 withStyles()
。
withStyles()
是 HOC,通常与 class-based 组件一起使用。
makeStyles()
另一方面是hook creator,hooks更适合在函数式组件中使用。我建议您和您的 children 使用这种方法,因为越来越多的图书馆正在采用钩子作为主要 API 而不是 HOC。
您可以看到 ListItem
css classes 和 class 键 here 的列表,以了解要应用到哪个 class .
const useStyles = makeStyles({
root: {
"& .Mui-selected": {
backgroundColor: "pink",
color: "red",
fontWeight: "bold"
},
"& .Mui-selected:hover": {
backgroundColor: "tomato"
}
}
});
function App() {
const [selected, setSelected] = React.useState("home");
const styles = useStyles();
return (
<List className={styles.root}>
...
</List>
);
}
如果想用class键(选中)代替cssclass(Mui-selected),可以这样写
const useStyles = makeStyles({
root: {
"&$selected": {
backgroundColor: "pink",
color: "red",
"&:hover": {
backgroundColor: "tomato"
}
}
},
selected: {}
});
并像这样应用到组件
<List>
<ListItem
classes={{
root: styles.root,
selected: styles.selected
}}
...
>
...
</ListItem>
...
</List>
此时你应该考虑重构ListItem
到一个单独的组件来清理重复的代码。
实例
我想更改所选 ListItem
的样式,如 this codesandbox 所示。
在沙盒中,我使用全局 css 样式表,但我想使用 withStyle technique.
我该怎么做?
我应该使用什么 className
来定位 selected ListItem?
如果您使用的是无状态功能组件,则应使用 makeStyles()
而不是 withStyles()
。
withStyles()
是 HOC,通常与 class-based 组件一起使用。makeStyles()
另一方面是hook creator,hooks更适合在函数式组件中使用。我建议您和您的 children 使用这种方法,因为越来越多的图书馆正在采用钩子作为主要 API 而不是 HOC。
您可以看到 ListItem
css classes 和 class 键 here 的列表,以了解要应用到哪个 class .
const useStyles = makeStyles({
root: {
"& .Mui-selected": {
backgroundColor: "pink",
color: "red",
fontWeight: "bold"
},
"& .Mui-selected:hover": {
backgroundColor: "tomato"
}
}
});
function App() {
const [selected, setSelected] = React.useState("home");
const styles = useStyles();
return (
<List className={styles.root}>
...
</List>
);
}
如果想用class键(选中)代替cssclass(Mui-selected),可以这样写
const useStyles = makeStyles({
root: {
"&$selected": {
backgroundColor: "pink",
color: "red",
"&:hover": {
backgroundColor: "tomato"
}
}
},
selected: {}
});
并像这样应用到组件
<List>
<ListItem
classes={{
root: styles.root,
selected: styles.selected
}}
...
>
...
</ListItem>
...
</List>
此时你应该考虑重构ListItem
到一个单独的组件来清理重复的代码。