Docs

Learn

v.Latest
Documentation
Blocks Field
Table of Contents

This content is out-dated for the latest versions of TinaCMS. See other docs pages for more up to date information about Blocks

This is an advanced-use feature, and likely not something you'll need to configure. What you probably want is the content types reference!

The Blocks field represents a list of items, similar to the Group List field, but allows each entity in the list to have a unique shape.

For an in-depth explanation of the Blocks field, read our "What are Blocks?" blog post. To see a real-world example of Blocks in use, check out the Tina Grande Starter.

tinacms-blocks-gif

In the gif above, you see a list of Blocks: Title, Image, and Content. The form for this field could be configured like this:

const PageForm = {
label: 'Page',
fields: [
{
label: 'Page Sections',
name: 'rawJson.blocks',
component: 'blocks',
templates: {
'title-block': TitleBlock,
'image-block': ImageBlock,
'content-block': ContentBlock,
},
},
],
}
/*
** Block template definition for the content block
**/
export const ContentBlock = {
label: 'Content',
key: 'content-block',
defaultItem: {
content: '',
},
fields: [{ name: 'content', label: 'Content', component: 'textarea' }],
}

The source data for the ContentBlock might look like the example below. When new blocks are added, additional JSON objects will be added to the blocks array:

{
"blocks": [
{
"content": "**Billions upon billions** are creatures of the cosmos Orion's sword cosmic fugue at the edge of forever science?",
"_template": "content-block"
}
]
}

Blocks Field Options

import { Field } from '@tinacms/core'
interface BlocksConfig {
name: string
component: 'blocks'
label?: string
description?: string
templates: {
[key: string]: BlockTemplate
}
}

Option

Description

component

The name of the plugin component. Always 'blocks'.

name

The path to some value in the data being edited.

label

A human readable label for the field. Defaults to the name. (Optional)

description

Description that expands on the purpose of the field or prompts a specific action. (Optional)

templates

A list of Block templates that define the fields used in the Blocks.

Block Template Options

interface BlockTemplate {
label: string
key: string
fields: Field[]
defaultItem?: object | (() => object)
itemProps?: (item: object) => {
key?: string
label?: string
}
}

Option

Description

label

A human readable label for the Block.

key

Should be unique to optimize the rendering of the list.

fields

An array of fields that will render as a sub-menu for each group item. The fields should map to editable content.

defaultItem

A function to provide the block with default data upon being created. (Optional)

itemProps

A function that generates props for each group item. It takes the item as an argument. (Optional) It returns an object containing, key: This property is used to optimize the rendering of lists. If rendering is causing problems, use defaultItem to generate a new key, as is seen in this example. Feel free to reference the React documentation for more on keys and lists. label: A readable label for the new Block.

This interfaces only shows the keys unique to the blocks field. Visit the Field Config docs for a complete list of options.
Last Edited: January 8, 2025