2022-10-06 09:15:30 +00:00
---
title: "defineNuxtComponent"
description: defineNuxtComponent() is a helper function for defining type safe components with Options API.
2023-10-18 10:59:43 +00:00
links:
- label: Source
icon: i-simple-icons-github
to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/component.ts
size: xs
2022-10-06 09:15:30 +00:00
---
2023-10-18 10:59:43 +00:00
::callout
`defineNuxtComponent()` is a helper function for defining type safe Vue components using options API similar to [`defineComponent()` ](https://vuejs.org/api/general.html#definecomponent ). `defineNuxtComponent()` wrapper also adds support for `asyncData` and `head` component options.
::
2022-09-20 09:09:29 +00:00
2023-10-18 10:59:43 +00:00
::callout{color="blue" icon="i-ph-info-duotone"}
2022-09-20 09:09:29 +00:00
Using `<script setup lang="ts">` is the recommended way of declaring Vue components in Nuxt 3.
2022-04-06 05:56:08 +00:00
::
2022-09-20 09:09:29 +00:00
2023-10-18 10:59:43 +00:00
:read-more{to=/docs/getting-started/data-fetching}
2022-09-20 09:09:29 +00:00
## `asyncData()`
If you choose not to use `setup()` in your app, you can use the `asyncData()` method within your component definition:
```vue [pages/index.vue]
< script lang = "ts" >
export default defineNuxtComponent({
async asyncData() {
return {
data: {
greetings: 'hello world!'
}
}
},
})
< / script >
```
2022-11-15 14:47:17 +00:00
## `head()`
If you choose not to use `setup()` in your app, you can use the `head()` method within your component definition:
```vue [pages/index.vue]
< script lang = "ts" >
export default defineNuxtComponent({
head(nuxtApp) {
return {
title: 'My site'
}
},
})
< / script >
```