跳到主要内容

窗口与渲染器约 3 分钟

热重载

bun --hot 下保存会重新运行入口,render() 在同一个窗口上重新挂载 React。

1. 文件以 render() 结尾

import { render } from '@gpuix/react'

function App() {
  return <div style={{ padding: 16 }}>hello</div>
}

render(<App />, { title: 'My App', width: 800, height: 600 })

不要在此文件中调用 createRenderer() 或 init()。bun --hot 在保存时会重新运行整个入口。第二次 init() 会打开第二个窗口。

2. 用 bun –hot 启动应用

优先使用 bun --hot,而非普通的 bun 或 tsx 运行。没有 --hot 时,一次保存会启动第二个进程。有了它,render() 会在同一个窗口上重新挂载 React。

bun --hot app.tsx

3. 保存文件

save .tsx  ►  bun re-evaluates the entry  ►  render() remounts React
                     │
                     ▼
              GpuixRenderer, window, GPU stay

第一次 render() 会创建原生宿主并将其存储在 globalThis 上。每次保存都会卸载 React 树,并在同一个宿主上挂载一棵新的。

保持不变: 窗口、GPU 设备、原生 .node 插件、GPUI 的滚动物理。

会被重置: useState、焦点、React 事件处理器。

原生的 .node 改动仍然需要重新构建。参见开发 Rust 侧。

浏览器 Web 示例的热重载路径不同:它走的是 React Fast Refresh,会保留 useState。见示例。