# Class: Component

组件，系统核心之一。

组件就是`wxml`的标签上写的那些`attribute`，比如`<xr-element transform="position: 1 1 1" />`中，`transform`就是一个组件，`position`是它的一个属性。
这些属性可以在`schema`中被定义，变化时会触发对应的生命周期。
自定义组件最后使用[registerComponent](../modules#registerComponent)，组件的属性可以使用代理规则来简化，比如以上的标签可以简化为`<xr-element position="1 1 1" />`，详见[Element](Element)。

## Type parameters

| Name | Description |
| :------ | :------ |
| `IData` | 组件数据的类型，应当和`schema`中一致，用于TS类型推断。 |

## Hierarchy

- **`Component`**

  ↳ [`Transform`](Transform)

  ↳ [`AssetLoad`](AssetLoad)

  ↳ [`Assets`](Assets)

  ↳ [`Camera`](Camera)

  ↳ [`GLTF`](GLTF)

  ↳ [`Light`](Light)

  ↳ [`AssetMaterial`](AssetMaterial)

  ↳ [`Mesh`](Mesh)

  ↳ [`Text`](Text)

  ↳ [`AssetRenderTexture`](AssetRenderTexture)

  ↳ [`Env`](Env)

  ↳ [`Animator`](Animator)

  ↳ [`CameraOrbitControl`](CameraOrbitControl)

  ↳ [`ARTracker`](ARTracker)

  ↳ [`Shape`](Shape)

  ↳ [`Rigidbody`](Rigidbody)

  ↳ [`ShapeInteract`](ShapeInteract)

  ↳ [`ShapeGizmos`](ShapeGizmos)

  ↳ [`AssetPostProcess`](AssetPostProcess)

  ↳ [`AssetsSystem`](AssetsSystem)

  ↳ [`NodeSystem`](NodeSystem)

  ↳ [`TickSystem`](TickSystem)

  ↳ [`AnimationSystem`](AnimationSystem)

  ↳ [`VideoSystem`](VideoSystem)

  ↳ [`RenderSystem`](RenderSystem)

  ↳ [`PhysicsSystem`](PhysicsSystem)

  ↳ [`ARSystem`](ARSystem)

  ↳ [`ShareSystem`](ShareSystem)

  ↳ [`GizmoSystem`](GizmoSystem)

## Table of contents

### Constructors

- constructor

### Events

- onAdd
- onRelease
- onRemove
- onTick
- onUpdate

### Properties

- priority
- schema
- EVENTS

### Accessors

- el
- scene
- version

### Methods

- getData
- setData
- setDataOne

## Constructors

### constructor

• **new Component**()

#### Type parameters

| Name |
| :------ |
| `IData` |

## Events

### onAdd

▸ **onAdd**(`parent`, `data`): `void`

所挂载的`element`被挂载到场景时触发的回调。

#### Parameters

| Name | Type |
| :------ | :------ |
| `parent` | [`Element`](Element) |
| `data` | `IData` |

#### Returns

`void`

___

### onRelease

▸ **onRelease**(`data`): `void`

从被挂载的`element`上被移除，或是`element`被销毁时，触发的回调。
一般用于释放持有的资源。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | `IData` |

#### Returns

`void`

___

### onRemove

▸ **onRemove**(`parent`, `data`): `void`

所挂载的`element`从父节点`parent`被移除时，或者自己从`element`上被移除时，触发的回调。
一般用于消除功能的运作。
**如果一个组件的元素直接被销毁了，那这个组件就不会经历onRemove而是直接进入onRelease。**

#### Parameters

| Name | Type |
| :------ | :------ |
| `parent` | [`Element`](Element) |
| `data` | `IData` |

#### Returns

`void`

___

### onTick

▸ **onTick**(`deltaTime`, `data`): `void`

渲染每帧触发的回调。

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `deltaTime` | `number` | 单位为毫秒(ms)。 |
| `data` | `IData` | - |

#### Returns

`void`

___

### onUpdate

▸ **onUpdate**(`data`, `preData`): `void`

数据更新时触发的回调。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | `IData` |
| `preData` | `IData` |

#### Returns

`void`

## Properties

### priority

• `Readonly` **priority**: `number`

自定义组件的更新优先级。

___

### schema

• `Readonly` **schema**: [`IComponentSchema`](/miniprogram/dev/reference/xr-frame/api/interfaces/IComponentSchema) = `{}`

自定义组件的`schema`。

___

### EVENTS

▪ `Static` **EVENTS**: `string`[] = `[]`

## Accessors

### el

• `get` **el**(): [`Element`](Element)

挂载的元素。

#### Returns

[`Element`](Element)

___

### scene

• `get` **scene**(): [`Scene`](Scene)

当前场景。

#### Returns

[`Scene`](Scene)

___

### version

• `get` **version**(): `number`

当前版本，每次有数据更新都会增加，可以用作和其他组件合作的依据。

#### Returns

`number`

## Methods

### getData

▸ **getData**(`key`): `IData`[`T`]

获取一个当前值。

#### Type parameters

| Name | Type |
| :------ | :------ |
| `T` | extends `string` \| `number` \| `symbol` |

#### Parameters

| Name | Type |
| :------ | :------ |
| `key` | `T` |

#### Returns

`IData`[`T`]

___

### setData

▸ **setData**(`data`): `void`

不通过`xml`而是直接设置`data`，注意值的类型需要和`schema`中一致。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | `Partial` |

#### Returns

`void`

___

### setDataOne

▸ **setDataOne**(`key`, `value`): `void`

设置一个数据。

#### Type parameters

| Name | Type |
| :------ | :------ |
| `T` | extends `string` \| `number` \| `symbol` |

#### Parameters

| Name | Type |
| :------ | :------ |
| `key` | `T` |
| `value` | `IData`[`T`] |

#### Returns

`void`
