传递道具时 JSS 关键帧不起作用

如何解决传递道具时 JSS 关键帧不起作用

我有一个 Spinner 组件,它基本上是一个加载图标。我正在尝试将道具传递给 JSS 样式,以便可以对其进行自定义。但是如果我将道具传递给关键帧,动画似乎不起作用。

下面是组件。当我使用动画 $spinnertest 时它工作正常。如果我使用 $spinners,它不会加载动画(在检查元素时,animation-name 甚至不会出现在类中,让我相信它不会生成。)。

**Example CodeSandBox of issue(只需将动画更改为spinners):https://codesandbox.io/s/exciting-shirley-pqt1o?fontsize=14&hidenavigation=1&theme=dark

const useStyles = makeStyles(theme => ({
    root: props => ({
        width: props.size,height: props.size,position: 'relative',contain: 'paint',display: 'inline-block',}),spinner: props => ({
        width: props.size*0.3125,height: props.size*0.3125,background: props.color,position: 'absolute',animationDuration: props.duration,animationIterationCount: 'infinite',animationTimingFunction: 'ease-in-out',spinnerAnimation: {
        animationName: '$spinners',},square2: props => ({
        animationDelay: -props.duration/2,'@keyframes spinnertest': {
        '25%': {
            transform: 'translateX(22px) rotate(-90deg) scale(.5)','50%': {
            transform: 'translateX(22px) translateY(22px) rotate(-180deg)','75%': {
            transform: 'translateX(0) translateY(22px) rotate(-270deg) scale(.5)','to': {
            transform: 'rotate(-1turn)','@keyframes spinners': props => ({
        '25%': {
            transform: `translateX(${props.translate}px) rotate(-90deg) scale(.5)`,'50%': {
            transform: `translateX(${props.translate}px) translateY(${props.translate}px) rotate(-180deg)`,'75%': {
            transform: `translateX(0) translateY(${props.translate}px) rotate(-270deg) scale(.5)`,'to': {
            transform: `rotate(-1turn)`,}));

export default function Spinner(props) {
    const {duration,size,color} = props;
    const classes = useStyles({
        duration: duration,size: size,color: color,translate: size*(1-0.3125),});

    return (

        <Box className={classes.root}>
            <Box className={clsx(classes.spinner,classes.spinnerAnimation)} />
            <Box className={clsx(classes.spinner,classes.square2,classes.spinnerAnimation)} />
        </Box>
    )

}

Spinner.defaultProps = {
    duration: 1800,size: 32,color: #fff,}

解决方法

我有一个周转的解决方案,它有效(不是那么漂亮)。您可以将 withStyles 转换为采用 keyframesProps 的柯里化函数,并且在您的关键帧定义处,您将使用返回对象及其属性的 IIFE:

const useStyles = keyframesProps => makeStyles((theme) => ({
   ... all other styles,// you need to call an IIFE because keyframes doesn't receive a function
  "@keyframes spinners": ((props) => ({
    "25%": {
      transform: `translateX(${props.translate}px) rotate(-90deg) scale(.5)`
    },"50%": {
      transform: `translateX(${props.translate}px) translateY(${props.translate}px) rotate(-180deg)`
    },"75%": {
      transform: `translateX(0) translateY(${props.translate}px) rotate(-270deg) scale(.5)`
    },to: {
      transform: `rotate(-1turn)`
    }
  }))(keyframesProps)
}));

在您的组件中,您可以像这样定义 classes

  const styleProps = {
    duration: duration,size: size,color: color
  }

  const framesProps = {
    translate: size * (1 - 0.3125)
  }
  const classes = useStyles(framesProps)(styleProps);

keyframes-hack

,

听起来 MUI 在 makeStyles @keyframes 中的 props 有一个错误 #16673 正如 Olivier Tassinari 所说,此错误将在 v5 中修复,其中 MUI 将使用新的样式解决方案 styled-components RCF #22342

这个问题更加普遍:
箭头函数(有或没有道具)在 makeStyles 中不起作用 #21011

将道具传递给定义的关键帧中的规则将修复它(希望在 v5 可用后)

"@keyframes spinners": {
    "25%": {
      transform: (props) =>
        // console.log(props) and template generation will be created correctly.
        `translateX(${props.translate}px) rotate(-90deg) scale(.5)`
    },// ...
  }

在此之前,您可以使用更高阶的 useStyle creator 来嵌入您的关键帧,如@buzatto 所建议的那样。

或者在您的主​​题对象中定义您的动画预设,并在您的项目中全局使用它们。

const theme = createMuiTheme({
  animation: {
    presets: {
      duration: 180,// or even function
      rotateDeg: (angle) => `{angle}deg`
      //...
    }
  }
});


// usage
const useStyles = makeStyles(theme => ({
  "@keyframes spinners": {
    "25%": {
      transform: `translateX(${
        theme.animation.presets.duration * 10
      }px) rotate(${theme.animation.presets.rotateDeg(-90)}) scale(.5)`,},}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res