# 迁移指南
本指南旨在帮助您从 v1 迁移到最新版本的 TresJS 🤩✨ 。
::: code-group
```bash [pnpm]
pnpm update @tresjs/core
```
```bash [npm]
npm update @tresjs/core
```
```bash [yarn]
yarn upgrade @tresjs/core
```
:::
## 有什么变化?
### Vue 自定义渲染器
**TresJS** 现在是一个位于一个包装组件中的 [Vue 自定义渲染器](https://vuejs.org/api/custom-renderer.html#createrenderer),该组件 `TresCanvas` 负责为您创建 `WebGLRenderer` 和 `Scene` 创建一个 **新的 Vue App实例** 来渲染场景。
### Typescript 支持以及智能提示 🦾

这可能是 TresJS **最需要的功能**。现在,Tres 组件可与 Volar 配合使用,并提供类型智能提示。
**TresJS** 现在在构建时为基于 ThreeJS 对象清单的所有组件生成类型声明。这意味着您可以使用 ThreeJS 中的所有组件并为它们获取类型智能提示。
### Tres 插件现在是可选项👍
`TresPlugin` 现在是可选的。您可以在没有它的情况下使用 TresJS,方法是直接从 `tresjs/core` 导入组件:
```vue
```
::: info
出于性能和捆绑包大小的考虑,建议采用这种方法,树摇的效果会更好,而且您只需导入您使用的组件。
:::
### 不再需要 TresScene
`` 组件现已弃用,因为场景现在由 ``创建.
一开始,我认为为场景创建一个单独的组件,在语义方面保持与普通 ThreeJS 相似是个好主意,但事实证明这并没有什么用处。
现在您可以创建这样一个场景:
```vue
```
要迁移代码,只需移除 `` 组件并将子组件移至 `` 组件内即可。
### `useCatalog` 现已废弃
`useCatalog`函数现已废弃。现在可以直接从 `@tresjs/core` 中导入目录。
您可以在此处阅读有关它的更多信息:[Extending](/zh/advanced/extending.md)
将如下代码:
```ts {2,5,7}
// 错误的 ❌
import { useCatalog } from '@tresjs/core'
import { TextGeometry } from 'three/addons/geometries/TextGeometry'
const { extend } = useCatalog()
extend({ TextGeometry })
```
转换成:
```ts {2,6}
// 正确的 ✅
import { extend } from '@tresjs/core'
import { TextGeometry } from 'three/addons/geometries/TextGeometry'
// 将元素添加到目录中
extend({ TextGeometry })
```
### 模型的`getModel`实例方法现已废弃
`getModel`方法现已废弃. 你可以直接访问`model`的属性.
将如下代码:
```vue {7,9-12}
// 错误的 ❌
```
转换成:
```vue {7,9-12}
// 正确的 ✅
```
### 相机需要放置于任何控制器之前 🎥
`TresOrbitControls`组件在组件树内需要处于相机之后。这是因为控制器需要知道相机才能工作。
将如下代码:
```vue {3,5}
// 错误的 ❌
```
转换成:
```vue {3,5}
// 正确的 ✅
```
## UseTres 现在变成了 useTresContext
对于 v3,我们重新设计了整个状态逻辑,使其更灵活、更易于用于插件作者和生态系统包。我们现在不再像 v2 那样使用存储,而是使用基于 `provide/inject`。
`useTres` 函数现在是 `useTresContext` 函数的别名,以避免破坏演示和实验,但从现在起请考虑使用 `useTresContext`。
您现在可以直接获取 `scene` 和 `renderer`的引用以及其他属性,而不是一个大的 reactive 对象。
将如下代码:
```ts {2}
// 错误的 ❌
import { useTres } from '@tresjs/core'
const { state, setState } = useTres()
console.log(state.scene)
```
转换成:
```ts {2}
// 正确的 ✅
import { useTresContext } from '@tresjs/core'
const { scene, renderer } = useTresContext()
console.log(scene.value)
```
有关新上下文对象提供系统的更多详细信息,请阅读 [API 文档](/zh/api/composables.md) 部分。