在同级时更改组件的样式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在同级时更改组件的样式相关的知识,希望对你有一定的参考价值。
我有一个简单的例子,如果box1悬停了,我希望box2将背景更改为黄色。
代码示例:
const Box = styled.div`
height: 200px;
width: 200px;
background: blue;
`;
const Box2 = styled.div`
height: 200px;
width: 200px;
background: green;
margin-top: 20px;
${Box}:hover {
background: yellow;
}
`;
in render:
<Box>Box 1</Box>
<Box2>Box 2</Box2>
链接到代码预览:
https://stackblitz.com/edit/react-rvhgov
谢谢!
Edit上面的这似乎不起作用,不知道为什么,它应该起作用?
答案
取决于渲染项目,您可以使用不同的方法来实现,但是正如我们在此处所获得的,可以使用adjacent sibling combinator(+)或general sibling combinator(〜)。因此,您要做的就是替换这个
${Box}:hover {
background: yellow;
}
with
${Box}:hover ~ & ${Box2}{
background: yellow
}
另一答案
您可以尝试以下方法:
import React, { Component, useState } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';
import styled, {css} from 'styled-components';
const Box = styled.div`
height: 200px;
width: 200px;
background: blue;
`;
const Box2 = styled.div`
height: 200px;
width: 200px;
background: green;
margin-top: 20px;
${props => props.hovered && css`
background: yellow;
`}
`;
export default function App() {
const [hovered, setHovered] = useState(false);
return (
<div className="App">
{'' + hovered}
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<Box onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)}>Box 1</Box>
<Box2 hovered={hovered}>Box 2</Box2>
</div>
);
}
render(<App />, document.getElementById('root'));
使用这种方法,元素/组件的同级与否无关紧要。它适用于同级,也适用于组件嵌套在不同子树中的情况。
以上是关于在同级时更改组件的样式的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 AppBar MUI 样式组件在状态更改时不会更改样式?
如何在更改全屏/上方导航时使用导航组件 navhostfragment