css 在样式化组件中使用扩展操作符

nc1teljy  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(86)

我是 ReactReact-Spring 的新手,正在练习如何使用它。
这里有React-Spring文档中的基本代码,我想使用 styled-components 转换它。
我将代码转换为 styled-components,但不知道如何在 styled-components 中更改...springs
我能知道如何使用 * 样式化组件 * 来应用它吗?

文件编码:codesandbox

import '/index.css'
import { useSpring, animated } from '@react-spring/web'

export default function MyComponent() {
  const springs = useSpring({
    from: { x: 0 },
    to: { x: 100 },
  })

  return (
    <animated.div
      style={{
        width: 80,
        height: 80,
        background: '#ff6d6d',
        borderRadius: 8,
        // don't know how to conver this part
        ...springs,
      }}
    />
  )
}

我的代码:codesandbox

import { useSpring, animated } from "@react-spring/web";
import styled from "styled-components";

export default function App() {
  const springs = useSpring({
    from: { x: 0 },
    to: { x: 100 }
  });

  return (
    <Spring>
      <animated.div className="box">hi</animated.div>
    </Spring>
  );
}

const Spring = styled.div`
  border: 3px solid black;

  .box {
    width: 80px;
    height: 80px;
    background: #ff6d6d;
    border-radius: 8px;
    //this part doesn't work
    ...springs;
  }
`;
j2datikz

j2datikz1#

是否具有样式化组件并不影响您的代码:你仍然应该把springs对象直接扩展到<animated.div>中。

return (
  <Spring>
    <animated.div className="box" style={{ ...springs }} />
  </Spring>
);

如果您真的想将所有样式卸载到样式化组件,则可以创建一个新的样式化组件,该组件在内部使用animated.div,即:

const SpringBox = styled(animated.div)`
  width: 80px;
  height: 80px;
  background: #ff6d6d;
  border-radius: 8px;
`;

然后,您可以按如下方式更新模板:但请注意,您仍然在JSX模板中扩展springs,而不是通过样式化组件传递它:

return (
  <Spring>
    <SpringBox style={{ ...springs }} />
  </Spring>
);

相关问题