You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Recharts数据刷新时禁用动画,仅保留页面加载动画

解决Recharts面积图仅首次加载播放动画的问题

核心思路是通过状态控制图表的animation属性,只在页面首次加载时启用动画,后续数据更新时关闭动画。具体实现步骤如下:

  • 用状态变量标记是否为首次加载,比如isFirstLoad,初始值设为true
  • 首次获取数据并渲染图表后,将isFirstLoad改为false
  • 把AreaChart组件的animation属性绑定到这个状态变量

下面是React函数组件的完整示例:

import React, { useState, useEffect } from 'react';
import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip } from 'recharts';

const RealTimeAreaChart = () => {
  const [data, setData] = useState([]);
  // 标记是否为首次加载
  const [isFirstLoad, setIsFirstLoad] = useState(true);

  // 封装数据获取逻辑
  const fetchLatestData = async () => {
    // 替换成你的实际数据请求逻辑
    const res = await fetch('/api/get-real-time-data');
    const newData = await res.json();
    setData(newData);
    
    // 第一次加载完成后,关闭动画开关
    if (isFirstLoad) {
      setIsFirstLoad(false);
    }
  };

  useEffect(() => {
    // 页面加载时先拉一次数据
    fetchLatestData();
    // 每30秒更新一次数据
    const updateInterval = setInterval(fetchLatestData, 30000);
    
    // 组件卸载时清理定时器
    return () => clearInterval(updateInterval);
  }, []);

  return (
    <AreaChart
      width={800}
      height={400}
      data={data}
      // 仅首次加载时启用动画
      animation={isFirstLoad}
    >
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="timestamp" />
      <YAxis />
      <Tooltip />
      <Area type="monotone" dataKey="value" stroke="#2f80ed" fill="#2f80ed" fillOpacity={0.3} />
    </AreaChart>
  );
};

export default RealTimeAreaChart;

如果是类组件,逻辑类似:用this.state.isFirstLoad来控制,在componentDidMount中首次获取数据后将其设为false,后续定时器触发的数据更新不再修改这个状态,同时把animation={this.state.isFirstLoad}传给AreaChart即可。

内容的提问来源于stack exchange,提问作者Dassy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:06:01