electron + react +react-router-dom 打包桌面应用白屏

hash 是空字符串,说明你访问的是:

复制代码
file:///D:/web3/Harbour/resources/app.asar/build/index.html

没有带 #/ ,React Router 的 <Route path="/"> 也就匹配不到,所以整个 <main> 里什么都没有。


✅ 立即解决

1. 手动在地址栏加上哈希
复制代码
file:///D:/web3/Harbour/resources/app.asar/build/index.html#/

然后回车,看页面是否渲染出 Home 组件内容。

2. 或者把路由改成"兜底"匹配

App.tsx 里加一条通配路由,确保任何路径都至少渲染点什么:

tsx 复制代码
<Routes>
  <Route path="*" element={<Home />} />   {/* 兜底 */}
  <Route path="/" element={<Home />} />
  <Route path="/user" element={<User />} />
  ...
</Routes>

这样即使 hash 为空也能渲染 Home。


✅ 最终建议(Electron 打包后的正确姿势)

Electron 启动时,主动把窗口导航到带哈希的路径

js 复制代码
// main.js / main.ts
mainWindow.loadURL(
  url.format({
    pathname: path.join(__dirname, 'build/index.html'),
    protocol: 'file:',
    slashes: true,
    hash: '/',            // 关键:自动带 #
  })
);

或者使用 win.loadFile 的等价写法:

js 复制代码
mainWindow.loadFile('build/index.html', { hash: '/' });

✅ 总结

现象 原因 解决
hash 为空 没有 #/ → 路由匹配失败 1. 地址栏手动加 #/ 2. 路由加 path="*" 3. 主进程加载时主动带 hash: '/'

先试第 1 步手动加 #/,确认页面能出来,再按第 3 步修改主进程,让最终打包版自动跳到正确路径。

相关推荐
西陵29 分钟前
Nx带来极致的前端开发体验——使用MF进行增量构建
前端·javascript·架构
JackieDYH1 小时前
vue3中reactive和ref如何使用和区别
前端·javascript·vue.js
伍哥的传说1 小时前
解密 Vue 3 shallowRef:浅层响应式 vs 深度响应式的性能对决
javascript·vue.js·ecmascript·vue3.js·大数据处理·响应式系统·shallowref
ZZHow10242 小时前
React前端开发_Day4
前端·笔记·react.js·前端框架·web
前端开发爱好者2 小时前
弃用 html2canvas!快 93 倍的截图神器
前端·javascript·vue.js
ss2732 小时前
手写MyBatis第39弹:深入MyBatis BatchExecutor实现原理与最佳实践
前端·javascript·html
leon_teacher3 小时前
HarmonyOS权限管理应用
android·服务器·前端·javascript·华为·harmonyos
lumi.3 小时前
HarmonyOS image组件深度解析:多场景应用与性能优化指南(2.4详细解析,完整见uniapp官网)
前端·javascript·小程序·uni-app·html·css3
前端无涯3 小时前
uniapp跨平台开发---uni.request返回int数字过长精度丢失
javascript·uni-app
OEC小胖胖3 小时前
动态UI的秘诀:React中的条件渲染
前端·react.js·ui·前端框架·web