Styled-component 警告提示我使用 `attrs` 方法,即使我是?

Styled-component warning suggesting I use `attrs` method even though I am?

我有一个渲染了 3 次的样式组件,每次都有视差效果。

const ParallaxContainer = styled.section`
  position: absolute;
  left: 0;
  right: 0;
  height: 100%;
  opacity: 0.3;
  bottom: ${props => props.bottomValue}px;
`;

视差是通过非常昂贵的计算更新每个 scrollEvent 的 bottom 值来实现的。意思是,这个组件经常被重新渲染。

毫不奇怪,我收到了警告 Over 200 classes were generated for component styled.section. Consider using the attrs method, together with a style object for frequently changed styles. 所以我尝试听从建议,并将组件重构为:

const ParallaxContainer = styled.section.attrs(
  ({ bottomValue }) => ({
    style: {
      bottom: bottomValue + "px"
    }
  })
)`
  position: absolute;
  left: 0;
  right: 0;
  height: 100%;
  opacity: 0.3;
`;

但我仍然遇到同样的错误。我做错了什么?

演示我的问题的沙盒:https://codesandbox.io/embed/styled-components-is-yelling-at-me-attrs-zhnof

问题是您留下的行在您的样式中被注释掉了。请记住,您的样式只是一个模板字符串。 CSS 风格的注释行仅在字符串被插入并传递给 Styled Components 后才会被忽略。

Over 200 classes 错误首先发生是因为样式字符串需要在每个滚动事件上重新计算,这会产生一个全新的样式组件实例。移动到 attrs 就像用老式的 React 方式在 JS 中定义样式,所以这些样式不会通过 Styled Components。