【React】List使用QueueAnim动画效果不生效——QueueAnim与函数组件兼容性问题

版本:

  • "antd-mobile": "^5.37.1",
  • "rc-queue-anim": "^2.0.0",

问题

在使用 QueueAnim 时,如果动画的子元素是 Ant Design Mobile 中的组件(如 List.Item),可能会遇到动画不生效的问题,并且会看到类似以下警告:

复制代码
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

原因

Ant Design Mobile 中的组件(如 List.Item)在新版v5中是函数组件,而 QueueAnim 使用 ref 来控制动画,但函数组件不能直接使用 ref,导致动画无法正常执行。


解决方法

  1. 使用 div 包裹组件 :

    因为 QueueAnim 需要将 key 放在最外层元素上,而且 div 能正常支持 ref,所以可以使用 div 包裹需要动画的组件(例如 List.Item),并将 key 放在 div 上。

  2. 代码更新 :

    你只需要在 div 上设置 key,并且确保 QueueAnim 的动画应用在 div 上,而不是直接应用在 List.Item 上。

代码示例

jsx 复制代码
import React from 'react';
import { List } from 'antd-mobile';
import QueueAnim from 'rc-queue-anim';

function Chat({ msgs }) {
  return (
    <QueueAnim type="left" delay={100}>
      {/* 只在 div 上设置 key,包裹 List.Item */}
      {msgs.map((msg) => (
        <div key={msg._id}>
          <List.Item>
            {msg.content}
          </List.Item>
        </div>
      ))}
    </QueueAnim>
  );
}

export default Chat;

总结

  • 函数组件不支持 ref :新版的 Ant Design Mobile 组件(如 List.Item)是函数组件,它们不能直接使用 ref,导致 QueueAnim 动画效果无法生效。
  • 使用 div 包裹 :通过将 List.Item 组件包裹在 div 元素内,并在 div 上添加 key,可以避免上述问题,并使动画正常工作。
相关推荐
admin and root7 小时前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
前端snow8 小时前
ai agent --- postgreSQL 关系型数据库
前端
卷无止境9 小时前
ECharts:把数据变成故事的可视化利器
前端
Eric_见嘉9 小时前
在职前端 Skill 和 MCP 分享
前端·后端·agent
liangshanbo12159 小时前
面试题:如何优化 Webpack 的打包速度?
前端·webpack·node.js
wengad9 小时前
从 wangEditor 迁到 wangEditor-next
前端·javascript·vue.js
行者-全栈开发11 小时前
【前端/JS框架】CVE-2026-3854:GitHub Enterprise Server X-Stat注入XSS漏洞深度剖析与紧急修复指南
前端·javascript·github
计算机魔术师11 小时前
AMD砸82亿买下李飞飞,这次不卖芯片卖什么?
前端
hzxpaipai12 小时前
杭州企业官网怎么建设?从策划到上线的5步建站方法
运维·服务器·前端·网络
怕浪猫12 小时前
2026年金九银十,我面了22个前端
前端·javascript·面试