当前位置: 首页 > 知识库问答 >
问题:

如何在不同组件中创建(悬停)规则时引用另一个组件的样式组件生成的类名称?

储峻
2023-03-14

我正在创建一个包含样式化组件和React的菜单,并希望图标的颜色在悬停时更改,但我需要它在图标的父项悬停时更改,以便将文本悬停在图标旁边也会激活图标的悬停样式。下面是我用来接近的代码:

import React from 'react';
import styled from 'styled-components';
import { Link } from 'react-router-dom';

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';

const Menu = styled.div`
  display: flex;
  flex-direction: column;
`;

const LinkContainer = styled.div`
  display: flex;
  flex-direction: row;
`;

const FontAwesomeIconExtended = styled.div`
  flex: 1;

  display: grid;
  place-items: center;
  height: 40px;
  width: 40px;
  padding: 10px 2px;
  border-radius: 10px;
  transition: color 0.5s ease;

  color: ${(props) => (props.$isactive ? '#fff' : '#CBE3EB')};
  background: ${(props) =>
    props.$isactive
      ? 'linear-gradient(96.34deg, #004157 0%, #0090b2 100%)'
      : '#fff'};

  ${LinkContainer}:hover & {
    color: ${(props) => (props.$isactive ? '#fff' : 'green')};
  }                                                 /* Problem occurring here */
`;

const LinkText = styled.div`
  flex: 1 0 100px;
`;

function NavLink({ ...props }) {
  return (
    <Link to={props.path}>
      <LinkContainer $isactive={props.$isactive}>
        <FontAwesomeIconExtended
          $isactive={props.$isactive}
          icon={props.icon}
          size='2x'
          as={FontAwesomeIcon}
        />
        <LinkText $isactive={props.$isactive}>{props.name}</LinkText>
      </LinkContainer>
    </Link>
  );
}

export default function NavMenu() {
  return (
    <Menu>
      <NavLink path='/' name='Home' icon='house' $isactive />
      <NavLink path='/profile' name='Profile' icon='user' />
      <NavLink path='/payments' name='Payments' icon='credit-card-front' />
      <NavLink path='/contracts' name='Contracts' icon='file-contract' />
      <NavLink path='/messages' name='Messages' icon='mail-bulk' />
      <NavLink path='/messages' name='Documents' icon='folders' />
      <NavLink path='/locations' name='Transfer' icon='truck-moving' />
    </Menu>
  );
}

在以后的组件中引用另一个样式化组件的方式非常聪明,但在本例中,当它创建悬停规则时,它创建时不考虑不同类型的父容器($isactive===true或$isactive==false),因此所有链接容器都有两个悬停规则,并使用最后定义的规则。这可以通过将$isactive移动到最后一个NavLink组件看到。

这里是devtools的屏幕截图,显示了我所说的两个悬停规则的含义,没有考虑父类,只是父类的一般类型。

我认为解决方案可能涉及在创建悬停规则时对LinkContainer的两种类型的类名进行具体说明,但这似乎不受很好的支持。谢谢你看一下。

共有1个答案

孔礼骞
2023-03-14

通过重复类名,使用另一个“

${LinkContainer}:hover && {
 类似资料:
  • 问题内容: 处理样式化组件中悬停的最佳方法是什么?我有一个包装元素,将鼠标悬停时会显示一个按钮。 我可以在组件上实现某些状态并在悬停时切换属性,但想知道是否有更好的方法可以使用styled-cmponents来做到这一点。 像下面这样的东西不起作用,但是很理想: 问题答案: 从样式组件v2开始,您可以插值其他样式组件以引用其自动生成的类名。在您的情况下,您可能需要执行以下操作: 有关更多信息,请参

  • 处理样式组件中悬停的最佳方法是什么?我有一个包装元素,当悬停时会显示一个按钮。 我可以在组件上实现一些状态,并在悬停状态下切换属性,但我想知道是否有更好的方法使用样式化的cmponents来实现这一点。 类似于以下内容的内容不起作用,但非常理想:

  • 在按钮悬停我想做的改变:之前的内容太,我找不到一个答案在官方留档我想知道这是可能的。 这里是样式组件:

  • 我正在开发一个带有样式组件的反应应用程序,我有一个组件“导航”。在这个组件中有更多的组件,如,等。Header例如是这样声明的: 问题是,我在不同的文件中有这个导航组件,对于所有文件,样式都很好,但现在我只想在其中一个文件中更改标题组件的背景色,它位于(?)导航组件。我该怎么做?我知道可以用const NewNav=styled(导航)之类的东西从导航组件更改样式,`但是标题呢? 先谢谢你。

  • 我有一个问题,试图测试与样式组件制成的组件。 因此,我有两个组件,如果我将鼠标悬停在第一个元素上,我试图改变第二个组件的背景色。 我的组件: 每当我尝试用jest它总是抛出一个错误,表示。但是,当我在标签中注释对容器组件的引用时,测试通过了。有人能帮忙吗?非常感谢你。 我正在使用react测试库在测试文件中呈现组件。

  • 我知道我们在函数组件中使用history.push(),并对重定向路由做出反应。但是在类组件中,我们如何在点击按钮时重定向