【问题标题】:How to work with classes that change in styled-components如何使用样式组件中发生变化的类
【发布时间】:2019-10-07 05:00:33
【问题描述】:

可能有人问过这个问题,但我找不到答案。我是样式组件的新手,但慢慢开始欣赏它们。我试图了解如何获取类名,因为它们是动态变化的。我正在做的代码是:

样式化组件

export const NavOpen = styled.div`
  position: absolute;
  top: 25px;
  left: 30px;
  transition-property: all;
  transition-duration: 0.2s;
  transition-timing-function: linear;
  transition-delay: 0s;
  width: 35px;
  height: 25px;
  overflow: hidden;
  cursor: pointer;
  z-index: 1;
`;

javascript

const slideInWindow = display => {
  if (display) {
    const navWindow = document.querySelector(".sc-ifAKCX");
    navWindow.classList.add("slidein");
  }
};

JSX

<NavOpen onClick={() => slideInWindow(true)}>
  <Bar1 />
  <Bar2 />
  <Bar3 />
  {display && <X onClick={() => closeWindow(false)} />}
</NavOpen>

.sc-ifAKCX 类以前有所不同。我确定我做错了,但试图了解如果课程对我发生变化,我应该如何查询课程。

【问题讨论】:

    标签: javascript styled-components


    【解决方案1】:

    您可以为每个样式化的组件指定一个您选择的类名:

    export const NavOpen = styled.div.attrs({
      className: 'slidein-target'
    })`
      position: absolute;
      top: 25px;
      left: 30px;
      transition-property: all;
      transition-duration: 0.2s;
      transition-timing-function: linear;
      transition-delay: 0s;
      width: 35px;
      height: 25px;
      overflow: hidden;
      cursor: pointer;
      z-index: 1;
    `;
    

    现在每个NavOpen 实例的类列表中都有slidein-target 类,您可以将其用作查询选择器。

    请注意,slidein-target 不会替换生成的类名 sc-XXXXXX,但会出现在它旁边。

    【讨论】:

    • 这是好的做法吗?这是预期的结果还是只是一种解决方法?
    • 如果您能将此标记为正确,我将不胜感激。直接 dom 操作在 React 中被认为是危险的,但只要你意识到潜在的问题,它并不可怕。 This is an official reference,我建议阅读它。基本上,他们建议将该组件与标记的其余部分隔离开来,并将其操作与生命周期方法联系起来。可能有一种更“反应”的方式可以做你想做的事情,但这并不是一个天生不好的解决方案
    猜你喜欢
    • 2022-12-11
    • 2020-06-07
    • 2019-07-29
    • 2021-07-05
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2021-10-11
    • 2020-09-26
    相关资源
    最近更新 更多