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完全一致:- 卸载旧包:
npm uninstall react-redux - 安装新包:
npm install preact-redux - 替换所有导入语句:把从
react-redux导入Provider、useDispatch、useSelector的代码,改为从preact-redux导入即可,不需要额外修改业务代码。
- 卸载旧包:
清理缓存重启服务
修改完所有配置后执行npx vite --force启动项目,强制Vite清理之前的依赖预构建缓存,避免旧缓存导致配置不生效。
内容的提问来源于stack exchange,提问作者Vivek Kaushik
相关产品推荐
相关产品推荐

