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

Next.js中Lottie加载Contentful动画JSON报错:对象不可扩展

解决Lottie动画组件“Cannot add property completed, the object is not extensible”错误

问题原因

Contentful返回的JSON对象大概率被设置为不可扩展状态(比如通过Object.freeze处理,或是数据获取库/框架的响应式包装导致对象被冻结),而Lottie动画组件在运行时需要向传入的animationData对象添加内部属性(比如completed),尝试修改不可扩展对象就会触发这个报错。本地/public目录的JSON文件导入时是普通可扩展对象,所以不会出现问题。

解决方案

  • 深拷贝转换为可扩展对象
    最简单的方法是通过JSON.parse(JSON.stringify())对Contentful返回的数据做深拷贝,生成一个全新的可扩展对象,再传给Lottie组件:

    // 假设从Contentful获取到的动画数据为lottieContentfulData
    const animationData = JSON.parse(JSON.stringify(lottieContentfulData));
    // 传入Lottie组件
    <Lottie animationData={animationData} loop autoplay />
    
  • 解除响应式代理(如果适用)
    如果你使用的框架或数据库把Contentful返回的数据包装成了响应式对象(比如MobX observable、Vue响应式代理),可以通过对应框架的API解除代理后再使用,或是直接用深拷贝的方式绕过。

  • 禁止直接修改原数据
    不要尝试直接给Contentful返回的原始对象添加属性,必须先生成可扩展的副本再传入Lottie组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:05:15