Portable text


Global helper

This module defines a global <SanityContent> component that can turn portable text into HTML. It is a lightweight functional component without an instance.

If you want to use the same serializers in multiple places, consider creating your own component (e.g. <MySanityContent> which wraps SanityContent, but with your default serializers. By creating ~/components/MySanityContent.vue you should be able to use this everywhere in your app without importing it.

Example

<template>
  <SanityContent :blocks="content" />
</template>

Example with custom serializers

<template>
  <SanityContent :blocks="content" :serializers="serializers"  />
</template>

<script setup>
import CustomBlockComponent from '~/components/CustomBlockComponent.vue'
import { resolveComponent } from 'vue'

const serializers = {
  types: {
    // This is how to access a component registered by `@nuxt/components`
    lazyRegisteredComponent: resolveComponent('LazyCustomSerializer'),
    // A directly imported component
    importedComponent: CustomBlockComponent,
    // Example of a more complex async component
    dynamicComponent: defineAsyncComponent({
      loadingComponent: () => 'Loading...',
      loader: () => import('~/other/component.vue'),
    }),
  },
  marks: {
    // You can also just pass a string for a custom serializer if it's an HTML element
    internalLink: 'a'
  }
}
</script>

Other resources