我可以在 emotion-js 中使用 @for 循环,类似于 sass 中的 @for 吗?

Can I use @for loop in emotion-js, similarly to @for in sass?

在 sass 如果我写:

@for $i from 1 through 3 li:nth-child(#{$i}) transition-delay: #{$i * 0.3}s

,我可以为每个列表元素获得一个很好的渐进式过渡延迟。

是否可以用 emotion-js 做到这一点?

好的,我想通了。

首先我创建了一个 JS 函数,它执行我的循环,然后 returns 将样式作为一个对象

const menuListTrans = () => {
  let styles = {};
  for (let $i = 0; $i < 10; $i++) {
    styles["&:nth-child(" + $i + ")"] = {
      transitionDelay: "1s," + $i * 0.08 + "s",
    };
  }
  return styles;
};

然后将其插入样式组件

const MenuList = styled.ul`
  &.expanded > li {
    transform: translateY(0);
    ${menuListTrans}
  }
`;

这里是相同的方法,但有变量。

export const nthChildDelay = ({ count = 10, delay = 100, multiplier = 80 }) => {
  const styles = {};
  [...Array(count).keys()].forEach((_, index) => {
    if (index !== 0) {
      styles[`&:nth-child(${index})`] = {
        transitionDelay: `${delay + (index - 1) * multiplier}ms`,
      };
    }
  });
  return styles;
};

然后用作

${nthChildDelay({ count: 10, delay: 100, multiplier: 100 })};