You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

DotLottieReact加载.lottie文件偶发失败并抛出DOMException的问题求助

DotLottieReact加载.lottie文件偶发失败并抛出DOMException的问题求助

针对你在React 18 + Vite 4项目里遇到的这个偶发问题,我整理了几个常见的原因和对应的解决思路,你可以逐一排查试试:

可能的原因及解决办法

1. Vite下public资源的路径解析问题

在Vite项目中,public目录下的资源引用有特定的规则:

  • 你当前用的./crown.lottie相对路径,在某些路由场景下可能会出现解析错误,导致资源加载不完整。
  • 解决方式:改用绝对路径(因为public目录的资源会被部署到项目根目录),或者通过import.meta.env.BASE_URL拼接路径,确保路径始终正确:
    // SecondSection.jsx 修改路径写法
    <Animation url={`${import.meta.env.BASE_URL}crown.lottie`}/>
    

2. .lottie文件本身的损坏或格式异常

偶发的加载失败有可能是文件本身存在损坏,或者在打包、传输过程中出现了截断:

  • 你可以重新导出/下载一份完整的.lottie文件替换现有文件,同时核对文件的MD5值,确保和源文件一致;也可以用LottieFiles官方预览工具打开文件,确认动画本身没有结构错误。

3. 组件渲染时机与资源预加载不匹配

有时候组件在资源还没完全加载完成就开始渲染,会触发解析错误:

  • 可以给组件添加加载状态和错误处理逻辑,提前预加载资源:
    // Animation.jsx 优化代码
    import React, { useState, useEffect } from 'react';
    import { DotLottieReact } from '@lottiefiles/dotlottie-react';
    
    export const Animation = ({url="path/to/animation.lottie"}) => {
        const [isLoaded, setIsLoaded] = useState(false);
        const [loadError, setLoadError] = useState(null);
    
        useEffect(() => {
            const preloadResource = async () => {
                try {
                    const response = await fetch(url);
                    if (!response.ok) throw new Error('资源加载失败');
                    await response.blob();
                    setIsLoaded(true);
                } catch (err) {
                    setLoadError(err);
                }
            };
            preloadResource();
        }, [url]);
    
        if (loadError) return <div>动画加载失败,请刷新重试</div>;
        if (!isLoaded) return <div>加载中...</div>;
    
        return (
            <DotLottieReact
                src={url}
                loop
                autoplay
            />
        );
    };
    

4. 包版本兼容性问题

当前使用的@lottiefiles/dotlottie-react版本可能和React 18、Vite 4存在兼容性冲突:

  • 可以尝试升级到最新版本的包:
    npm update @lottiefiles/dotlottie-react
    
    也可以查看官方文档确认版本兼容情况,必要时回退到稳定兼容的版本。

备注:内容来源于stack exchange,提问作者Aga

火山引擎 最新活动