【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,可以避免上述问题,并使动画正常工作。
相关推荐
共享家95271 小时前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
Halo_tjn2 小时前
基于封装的专项 知识点
java·前端·python·算法
摘星编程3 小时前
OpenHarmony环境下React Native:自定义useTruncate文本截断
javascript·react native·react.js
Duang007_3 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
2601_949868365 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 主入口实现
开发语言·javascript·flutter
m0_748229995 小时前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
2601_949593655 小时前
高级进阶React Native 鸿蒙跨平台开发:LinearGradient 背景渐变与主题切换
react native·react.js·harmonyos
C澒5 小时前
前端监控系统的最佳实践
前端·安全·运维开发
xiaoxue..5 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
摘星编程5 小时前
在OpenHarmony上用React Native:自定义useHighlight关键词高亮
javascript·react native·react.js