portable-text-serialization

Render dan serialisasi Portable Text ke React, Svelte, Vue, Astro, HTML, Markdown, dan teks biasa. Gunakan saat mengimplementasikan rendering Portable Text di frontend mana pun…

npx skills add https://github.com/sanity-io/agent-toolkit --skill portable-text-serialization

Portable Text Serialization

Render Portable Text content across frameworks using the @portabletext/* library family. Each library follows the same component-mapping pattern: you provide a components object that maps PT node types to framework-specific renderers.

Portable Text Structure (Quick Reference)

PT is an array of blocks. Each block has _type, optional style, children (spans), markDefs, listItem, and level.

Root array
├── block (_type: "block")
│   ├── style: "normal" | "h1" | "h2" | "blockquote" | ...
│   ├── children: [span, span, ...]
│   │   └── span: { _type: "span", text: "...", marks: ["strong", "<markDefKey>"] }
│   ├── markDefs: [{ _key, _type: "link", href: "..." }, ...]
│   ├── listItem: "bullet" | "number" (optional)
│   └── level: 1, 2, 3... (optional, for nested lists)
├── custom block (_type: "image" | "code" | any custom type)
└── ...more blocks

Marks come in two forms:

  • Decorators: string values in marks[] like "strong", "em", "underline", "code"
  • Annotations: keys in marks[] referencing entries in markDefs[] (e.g., links, internal references)

Component Mapping Pattern (All Frameworks)

Every @portabletext/* library accepts a components object with these keys:

KeyRendersProps/Data
typesCustom block/inline types (image, code, CTA)value (the block data)
marksDecorators + annotationschildren + value (mark data)
blockBlock styles (h1, normal, blockquote)children
listList wrappers (ul, ol)children
listItemList itemschildren
hardBreakLine breaks within a block—

Framework-Specific Rules

Read the rule file matching your framework:

  • React / Next.js: rules/react.md — @portabletext/react or next-sanity
  • Svelte / SvelteKit: rules/svelte.md — @portabletext/svelte
  • Vue / Nuxt: rules/vue.md — @portabletext/vue
  • Astro: rules/astro.md — astro-portabletext
  • HTML (server-side): rules/html.md — @portabletext/to-html
  • Markdown: rules/markdown.md — @portabletext/markdown
  • Plain text extraction: rules/plain-text.md — @portabletext/toolkit

Additional Community Serializers

These are listed on portabletext.org but don't have dedicated rule files:

TargetPackage
React Native@portabletext/react-native-portabletext
React PDF@portabletext/react-pdf-portabletext
Solidsolid-portabletext
Qwikportabletext-qwik
Shopify Liquidportable-text-to-liquid
PHPsanity-php (SanityBlockContent class)
Pythonportabletext-html
C# / .NETdotnet-portable-text
Dart / Flutterflutter_sanity_portable_text

Common Patterns (All Frameworks)

Custom Types Need Explicit Components

PT renderers only handle standard blocks by default. Custom types (image, code, callToAction, etc.) require explicit component mappings — they won't render otherwise.

Keep Components Object Stable

In React/Vue, define components outside the render function or memoize it. Recreating on every render causes unnecessary re-renders.

Handle Missing Components Gracefully

All libraries accept onMissingComponent to control behavior when encountering unknown types:

  • false — suppress warnings
  • Custom function — log or report

Querying PT with GROQ

Always expand references inside custom blocks:

body[]{
  ...,
  _type == "image" => {
    ...,
    asset->
  },
  markDefs[]{
    ...,
    _type == "internalLink" => {
      ...,
      "slug": @.reference->slug.current
    }
  }
}

Lebih banyak skill dari sanity-io

tdd
sanity-io
Pengembangan berbasis pengujian dengan siklus merah-hijau-refaktor. Gunakan saat pengguna ingin membangun fitur atau memperbaiki bug menggunakan TDD, menyebutkan "merah-hijau-refaktor", ingin…
performance-optimization
sanity-io
Mengoptimalkan kinerja aplikasi. Gunakan ketika ada persyaratan kinerja, ketika Anda mencurigai adanya regresi kinerja, atau ketika Core Web Vitals atau waktu muat…
content-experimentation-best-practices
sanity-io
Panduan terstruktur untuk merancang, menjalankan, dan menganalisis eksperimen konten guna meningkatkan konversi dan keterlibatan. Mencakup kerangka hipotesis, pemilihan metrik, perhitungan ukuran sampel, dan pengujian signifikansi statistik dalam eksperimen A/B dan multivariat. Menyertakan sumber daya terperinci tentang nilai-p, interval kepercayaan, analisis kekuatan, dan metode Bayesian untuk menafsirkan hasil. Menyediakan pola integrasi CMS untuk mengelola varian di tingkat bidang dan menghubungkan eksternal...
content-modeling-best-practices
sanity-io
Panduan pemodelan konten terstruktur untuk desain skema, penggunaan ulang, dan pengiriman multi-saluran. Mencakup prinsip inti: memperlakukan konten sebagai data, bukan halaman, mempertahankan sumber kebenaran tunggal, mendesain untuk saluran masa depan, dan mengoptimalkan alur kerja editor. Termasuk kerangka keputusan untuk referensi versus objek tersemat, pemisahan perhatian, dan pola penggunaan ulang konten. Memberikan panduan taksonomi dan klasifikasi untuk pendekatan datar, hierarkis, dan faset. Berlaku untuk...
portable-text-conversion
sanity-io
Konversi konten HTML dan Markdown menjadi blok Portable Text untuk Sanity. Gunakan saat memigrasi konten dari CMS lama, mengimpor HTML atau Markdown ke Sanity,…
sanity-best-practices
sanity-io
Praktik terbaik dan panduan integrasi yang komprehensif untuk pengembangan Sanity CMS di berbagai kerangka kerja dan topik. Mencakup lebih dari 10 integrasi kerangka kerja termasuk Next.js, Nuxt, Astro, Remix, SvelteKit, dan Angular dengan pola spesifik kerangka kerja serta panduan pengaturan. Termasuk panduan topik untuk desain skema, optimasi kueri GROQ, Visual Editing, Portable Text, gambar, TypeGen, lokalisasi, dan migrasi konten. Menyediakan struktur referensi cepat untuk memuat hanya panduan yang relevan berdasarkan jenis tugas,...
sanity-migration
sanity-io
Merencanakan, mengimplementasikan, dan meninjau migrasi dari CMS lain serta sistem konten ke Sanity. Gunakan saat melakukan migrasi atau replatforming ke Sanity dari AEM, Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal, file Markdown/MDX/frontmatter, ekspor WXR/XML, API CMS, dump database, HTML statis, atau saat merancang alur kerja ekstraksi, transformasi, konversi Portable Text, migrasi aset, pengalihan, validasi, dan cutover.
data-analysisdatabasedevelopment
seo-aeo-best-practices
sanity-io
Panduan optimasi SEO dan AEO yang komprehensif mencakup metadata, data terstruktur, EEAT, dan kesiapan AI. Mencakup optimasi mesin pencari tradisional (SEO) dan optimasi mesin jawaban AI (AEO) di Google, ChatGPT, Perplexity, dan platform serupa. Termasuk dasar-dasar teknis SEO: metadata, tag Open Graph, sitemap, robots.txt, hreflang, dan konfigurasi SEO internasional. Menyediakan pola data terstruktur JSON-LD untuk skema Artikel, FAQ, Breadcrumb, dan Produk. Menerapkan...