【发布时间】:2018-11-25 13:35:08
【问题描述】:
考虑以下侧边栏导航的组件结构:
<ListItem button dense component={CustomNavLink} to="/dashboard">
<ListItemIcon>
<DashboardIcon />
</ListItemIcon>
<ListItemText primary="Dashboard" />
</ListItem>
任务是在悬停或CustomNavLink 变为活动状态时更改ListItemIcon 和ListItemText 的外观。
注意
CustomNavLink是一个扩展的 React Router 的NavLink组件 当它与当前路由匹配时,它会得到一个active类。
以下有点老套的方法通过classes 属性实现了这一点(为清楚起见进行了简化和简化):
const styles = {
root: {
...
'&.active, &:hover, &.active:hover': {
'& path': {
fill: 'red'
},
'& span': {
color: 'red'
}
}
}
};
(然后将classes 应用于ListItem 组件)
这似乎是一种极其糟糕的做法,因为嵌套组件的结构会泄漏到父级的样式中......这类似于在“旧”CSS 中这样做:
div:hover > ul > li > a {
color: red;
}
解决此问题的惯用 Material-UI 方法是什么?
作为参考,这是
styled-components中的做法:const CustomNavLink = styled(NavLink)` ... &:hover { ${ListItemIcon} { path: { fill: red; } } ${ListItemText} { color: red; } } `;
【问题讨论】:
标签: reactjs material-ui