创建应用
每个 Vitarx 项目都从创建一个应用实例开始。本页介绍如何使用 createApp 创建、挂载和配置应用。
基本用法
createApp 接受一个根组件作为参数,返回一个应用实例。调用 mount 方法将应用挂载到页面上。
最佳实践:分离组件与入口
为了避免开发模式下热更新导致应用重复挂载,推荐将组件定义和应用入口分离:
src/App.tsx - 定义根组件:
tsx
// 根组件定义,使用默认导出
export default function App() {
return <div>Hello, Vitarx!</div>
}src/main.tsx - 应用入口:
tsx
import { createApp } from 'vitarx'
import App from './App'
// 创建应用并挂载到 #app 元素
createApp(App).mount('#app')单一文件示例(快速原型)
如果只是快速原型开发或学习,可以在单个文件中完成:
tsx
import { createApp } from 'vitarx'
function App() {
return <div>Hello, Vitarx!</div>
}
createApp(App).mount('#app')提示
开发环境建议:使用分离式写法,这样热更新时只会重新渲染组件,不会重新创建整个应用实例,避免内容重复或状态丢失。
挂载应用
mount 方法支持两种参数形式:
- CSS 选择器字符串:如
'#app',框架会自动查找对应元素 - DOM 元素:直接传入一个 Element 对象
tsx
const app = createApp(App)
// 使用选择器字符串
app.mount('#app')
// 或直接传入 DOM 元素
app.mount(document.getElementById('app')!)WARNING
如果传入的选择器在页面中找不到对应元素,会抛出错误。请确保挂载目标在调用 mount 时已经存在于页面中。
卸载应用
调用 unmount 方法可以卸载应用,释放所有相关资源:
tsx
const app = createApp(App)
app.mount('#app')
// 需要时卸载应用
app.unmount()卸载后,页面上的 DOM 会被清除,所有响应式副作用和监听器也会被自动清理。
应用配置
createApp 的第二个参数可以传入配置对象,用于自定义应用行为:
tsx
import { createApp } from 'vitarx'
function App() {
return <div>Hello</div>
}
const app = createApp(App, {
// 全局错误处理器
errorHandler(error, info) {
console.error('应用错误:', error)
console.error('错误来源:', info)
},
// 自动生成 ID 的前缀
idPrefix: 'my-app'
})
app.mount('#app')errorHandler
全局错误处理器,当组件渲染或生命周期中抛出未捕获的错误时触发。
- error:错误对象
- info:错误来源信息
如果不配置,默认会在控制台输出错误日志。
idPrefix
框架内部自动生成 ID 时使用的前缀,默认值为 'v'。如果你需要在同一页面运行多个 Vitarx 应用,可以为每个应用设置不同的前缀以避免 ID 冲突。
完整示例
下面是一个包含配置的完整应用示例:
tsx
import { createApp, ref } from 'vitarx'
function App() {
const count = ref(0)
return (
<div>
<h1>计数器</h1>
<p>当前计数: {count}</p>
<button onClick={() => count.value++}>+1</button>
</div>
)
}
const app = createApp(App, {
errorHandler(error, info) {
console.error('[全局错误]', error, info)
},
idPrefix: 'counter'
})
app.mount('#app')
// 5 秒后卸载应用
setTimeout(() => {
app.unmount()
console.log('应用已卸载')
}, 5000)API 参考
typescript
declare function createApp(root: Component | View, config?: AppConfig): App
declare interface AppConfig {
errorHandler?: (error: unknown, info: ErrorInfo) => void
idPrefix?: string // 默认 'v'
}
declare class App {
mount(container: string | Element): this
unmount(): void
readonly config: Required<AppConfig>
readonly version: string
}下一步
- 编写组件 — 学习如何定义和使用组件