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

Preact+Vite+TS+Redux项目报错Cannot read properties of undefined '__H'

问题根因

这个__H相关报错是Preact专属的钩子初始化错误,触发原因是你配置的React别名未生效,react-redux库加载到了不兼容的React运行时,没有正确映射到preact/compat的实现。

修复方案
  • 首先修正vite.config.ts的别名配置
    你当前的alias字段直接放在了配置根节点,不符合Vite的配置规范,别名必须放在resolve字段下,修改后的配置如下:
export default defineConfig({
  esbuild: {
    jsxFactory: 'h',
    jsxFragment: 'Fragment',
  },
  resolve: {
    alias: [
      { find: 'react', replacement: 'preact/compat' },
      { find: 'react-dom/test-utils', replacement: 'preact/test-utils' },
      { find: 'react-dom', replacement: 'preact/compat' },
      { find: 'react/jsx-runtime', replacement: 'preact/jsx-runtime' }
    ]
  },
  plugins: [
    preactRefresh()
  ],
});

额外补充了test-utils和jsx-runtime的别名,避免其他依赖调用React新特性时出现兼容问题。

  • 优化tsconfig.json的路径映射
    去掉冗余的路径前缀,确保TS类型校验时能正确识别别名:
{
  "compilerOptions": {
    ...
    "paths": {
      "react": ["./node_modules/preact/compat/"],
      "react-dom": ["./node_modules/preact/compat/"]
    }
  },
  "include": ["src", "service-worker.js"]
}
  • (优先选择)替换为Preact专属Redux绑定包
    如果修正别名后仍有报错,直接卸载react-redux,换用Preact官方适配的绑定包,彻底避免兼容问题,该包适配你当前安装的Preact 10.x版本,API和react-redux完全一致:

    1. 卸载旧包:npm uninstall react-redux
    2. 安装新包:npm install preact-redux
    3. 替换所有导入语句:把从react-redux导入Provider、useDispatch、useSelector的代码,改为从preact-redux导入即可,不需要额外修改业务代码。
  • 清理缓存重启服务
    修改完所有配置后执行npx vite --force启动项目,强制Vite清理之前的依赖预构建缓存,避免旧缓存导致配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:09:03