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

React报错‘ReferenceError: indexedDB is not defined’但功能正常

解决indexedDB is not defined错误(数据已存入但控制台报错)

问题原因

indexedDB是浏览器专属API,仅在浏览器环境中存在。你的代码大概率在非浏览器环境(比如Node.js、SSR框架的服务端渲染阶段)执行了set('hello', 'world'),导致触发ReferenceError;而数据能成功存入是因为浏览器端的代码路径正常执行了存储操作,两个环境的执行是独立的。

解决方案

1. 限制代码仅在浏览器环境执行

通过判断全局对象(如window)是否存在,或者使用框架提供的浏览器端生命周期钩子,确保idb-keyval的方法只在浏览器中调用:

React示例

import { useEffect } from 'react';
import { set } from 'idb-keyval';

function YourComponent() {
  useEffect(() => {
    // useEffect仅在浏览器端渲染后执行
    set('hello', 'world');
  }, []);

  return <div>...</div>;
}

Vue示例

<script setup>
import { onMounted } from 'vue';
import { set } from 'idb-keyval';

onMounted(() => {
  // onMounted仅在浏览器端组件挂载后执行
  set('hello', 'world');
});
</script>

2. 动态导入idb-keyval(通用方案)

如果没有框架生命周期可用,可通过动态导入限制仅在浏览器环境加载并调用:

if (typeof window !== 'undefined') {
  import('idb-keyval').then(({ set }) => {
    set('hello', 'world');
  });
}

3. 排查非浏览器执行路径

如果是纯Node.js环境出现该错误,说明你错误地在服务器端代码中调用了浏览器API,直接移除这段代码即可——indexedDB无法在Node环境中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:15:48