React styled-components:引用其他组件
React styled-components: refer to other components
根据styled-components doc's我可以参考另一个组件来触发,比如悬停效果
const Link = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: papayawhip;
color: palevioletred;
`;
const Link2 = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: steelblue;
color: white;
${Link}:hover & {
background-color: greenyellow;
color: black;
}
`;
class Hello extends React.Component{
render() {
return(
<div>
<Link>Hello World</Link>
<Link2>Hello Again</Link2>
</div>
)
}
}
基本上,将鼠标悬停在我的 <Link>
上应该会触发 <Link2>
中 background-color
的变化。
这不会发生。有什么想法吗?
我在这里准备了一个代码片段:https://codesandbox.io/s/qv34lox494
您可以引用样式组件,它们是样式组件的子组件,而不是并排的。
请参阅文档中的引述:
Here, our Icon component defines its response to its parent Link being
hovered
对于您的问题,您可以为两个链接创建一个包装器,然后像这样在 CSS 中使用 adjacent sibling selector:
const Wrapper = styled.div`
& ${Link}:hover + ${Link2} {
background-color: greenyellow;
color: black;
}
`;
另一种方法是修改 Link2 上的选择器以使用兄弟项(现在是嵌套项选择器)。在那种情况下,你可以去掉额外的包装器
const Link = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: papayawhip;
color: palevioletred;
`;
const Link2 = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: steelblue;
color: white;
${Link}:hover + & {
background-color: greenyellow;
color: black;
}
`;
class Hello extends React.Component{
render() {
return(
<div>
<Link>Hello World</Link>
<Link2>Hello Again</Link2>
</div>
)
}
}
根据styled-components doc's我可以参考另一个组件来触发,比如悬停效果
const Link = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: papayawhip;
color: palevioletred;
`;
const Link2 = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: steelblue;
color: white;
${Link}:hover & {
background-color: greenyellow;
color: black;
}
`;
class Hello extends React.Component{
render() {
return(
<div>
<Link>Hello World</Link>
<Link2>Hello Again</Link2>
</div>
)
}
}
基本上,将鼠标悬停在我的 <Link>
上应该会触发 <Link2>
中 background-color
的变化。
这不会发生。有什么想法吗?
我在这里准备了一个代码片段:https://codesandbox.io/s/qv34lox494
您可以引用样式组件,它们是样式组件的子组件,而不是并排的。
请参阅文档中的引述:
Here, our Icon component defines its response to its parent Link being hovered
对于您的问题,您可以为两个链接创建一个包装器,然后像这样在 CSS 中使用 adjacent sibling selector:
const Wrapper = styled.div`
& ${Link}:hover + ${Link2} {
background-color: greenyellow;
color: black;
}
`;
另一种方法是修改 Link2 上的选择器以使用兄弟项(现在是嵌套项选择器)。在那种情况下,你可以去掉额外的包装器
const Link = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: papayawhip;
color: palevioletred;
`;
const Link2 = styled.a`
display: flex;
align-items: center;
padding: 5px 10px;
background: steelblue;
color: white;
${Link}:hover + & {
background-color: greenyellow;
color: black;
}
`;
class Hello extends React.Component{
render() {
return(
<div>
<Link>Hello World</Link>
<Link2>Hello Again</Link2>
</div>
)
}
}