Live preview Data models and custom fields
Publish
Use live previews to render edits in your data model without publishing them.
Although you can fetch Builder's Data Models using the Content API directly like a typical API resource, you can also use features such as live editing, previewing, and A/B testing of your Data Models within the Builder Visual Editor, all while using standard JS/TS syntax.
Prerequisites
To get the most out of this document, you should already be familiar with:
Importance of using live preview
Live preview is crucial when working with custom fields, data models, and structured data in Builder. It offers several benefits:
- Real-time updates by displaying changes immediately in the Visual Editor without publishing.
- Improved user experience to meet your expectations with an intuitive experience.
- Iterate more quickly on your content and designs more efficiently.
- Make sure your Sections, Pages, and structured data are exactly as intended before publishing.
Live previewing can support a smoother experience, with changes in Custom Fields, Data Models, or Structured Data updates in real-time.
Live preview examples
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
In the example below, the code subscribes to live updates from the Builder Visual Editor using the subscribeToEditor() function.
Whenever changes are made in the editor, the callback function updates the content variable with the new data. The onMount() function returns a cleanup function that unsubscribes from live updates when the component is unmounted.
The fetchOneEntry() function runs immediately after the component mounts to fetch the initial data from Builder.
In the template, the fetched data populates content, and the component renders the title, author, handle, and publishedDate using the data property of the content object.
The rendered content updates automatically whenever changes are made in the Builder Visual Editor, thanks to the reactive nature of the content variable and the live subscription set up in onMount().
Custom fields in a blog post
In the example below, the code subscribes to live updates from the Builder Visual Editor using the subscribeToEditor() function.
Whenever changes are made in the editor, the callback function updates the content variable with the new data. The onMount() function returns a cleanup function that unsubscribes from live updates when the component is unmounted.
The fetchOneEntry() function runs immediately after the component mounts to fetch the initial data from Builder.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
Custom fields in a blog post
In this example, the component defines two reactive properties:
content– Initialized asnull, this property stores the fetched data from Builder.unsubscribeFromEditor()– Initialized as an empty function, this property is assigned the unsubscribe function returned bysubscribeToEditor().
The fetched data is assigned to the content property using content.value. The component also subscribes to live updates from the Visual Editor using subscribeToEditor().
Whenever changes are made in the Visual Editor, the callback function updates the content property with the new data. When the component unmounts, unsubscribeFromEditor() is called to clean up the subscription.
Custom fields in a blog post
In this example, the component defines two reactive properties:
content– Initialized asnull, this property stores the fetched data from Builder.unsubscribeFromEditor()– Initialized as an empty function, this property is assigned the unsubscribe function returned bysubscribeToEditor().
The fetched data is assigned to the content property using content.value. The component also subscribes to live updates from the Visual Editor using subscribeToEditor().
Whenever changes are made in the Visual Editor, the callback function updates the content property with the new data. When the component unmounts, unsubscribeFromEditor() is called to clean up the subscription.
Standard example
The following example code defines a server-side data loader function called useBuilderContentLoader using routeLoader$, which fetches data from Builder based on the specified model and API key. The fetched data is then passed to the default component, where it is stored in a signal called content.
The component subscribes to live updates from the Builder Visual Editor using subscribeToEditor within the useVisibleTask$ lifecycle hook.
Whenever changes are made in the Visual Editor, the content signal is reactively updated, triggering a re-render of the component with the latest data.
The component conditionally renders the coffee name and info based on the availability of the content value, displaying a loading message while the data is being fetched.
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). Whenever changes are made in the Visual Editor, the content signal is reactively updated, triggering a re-render of the component with the latest data.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
Custom fields in a blog post
In this example, <BlogArticle/> is a functional component that uses the useState() hook to manage content retrieved from the model.
The useEffect() hook handles side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
Custom fields in a blog post
In this example, <BlogArticle/> is a functional component that uses the useState() hook to manage content retrieved from the model.
The useEffect() hook handles side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
data, an optionalloading, andfullDataparameters in case of SSR. - Add code that accesses your data in the
return()statement. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses a custom data model named blog-article, which includes a title, author, handle, and publishedDate fields, each of type text.
The component calls builder.get() to retrieve the published entry from the blog-article model by matching the urlPath to the route parameter.
The retrieved data is passed to BlogArticle component as a prop.
The fetched article data is passed to the <BuilderContent> component for rendering. The inline function used within <BuilderContent> accepts the following parameters:
data(required) – The resolved data from theblog-articlemodel. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional) – A boolean indicating whether the data is still loading.fullData(required for SSR) – Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not provided.
Fields such as title, author, handle, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <BuilderContent> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the provided model for rendering.
The inline function provides three parameters:
data(required): The resolved data from thesite-settingsmodel is the structured data from the most recent entry. If A/B testing is active,<BuilderContent>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullContent(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<BuilderContent>fetches the most recently published entry of the specified model if the content prop is not passed.
The video below shows using this example data model in the Visual Editor:
Custom fields in a blog post
This component uses the useState() hook to handle side effects, including fetching initial data and subscribing to live updates.
The fetchOneEntry() function is called with the blog-article model and API key to fetch data from Builder. If successful, setContent() updates the content state.
For real-time content preview, the component subscribes to the Visual Editor using subscribeToEditor(). When the state changes, setContent() updates the data, allowing content changes to appear instantly without a page refresh or publishing.
The useEffect() hook returns an unsubscribe() function to clean up the subscription when the component unmounts, preventing memory leaks.
If content is not available, the component displays a loading state. Once fetched, it renders key blog details such as title, author, handle, and publishedDate, dynamically pulling data from the blog-article model.
- Specify the name of your data model in
BuilderContentwith themodelprop. - Use a render prop pattern with the required
dataparameter, an optionalloadingparameter, and acontentparameter if you're using SSR. - In the
return()statement, add code that accesses your data. This code varies and depends on your use case. - Set the Preview URL on the data model. For detailed instructions on setting a Preview URL on a model, visit the Setting a persistent Preview URL on a model in Editing and Previewing Your Site.
- Test the live preview by editing your data model in the Builder Visual Editor and checking that the changes are reflected in your application.
The following snippet shows this structure.
Custom fields in a blog post
This example uses the blog-article model, which includes title, author, handle, and publishedDate fields.
The component fetches the published entry from data model using builder.get(), matching the route parameter to urlPath. If found, it updates the document title and passes the data to BlogArticleComponent for rendering.
On the client, the fetched article data is passed to the <builder-content> component to render. The component gets three parameters:
data(required): The resolved data from theblog-articlemodel. If A/B testing is active,<builder-content>automatically serves the winning variant without additional setup.loading(optional): A boolean indicating whether the data is still loading.fullData(required for SSR): Includes all raw data from the Content API, such as A/B variations and metadata. In client-side rendering,<builder-content>fetches the most recently published entry of the specified model if thecontentprop is not passed.
Fields such as title, author, and publishedDate update in real time within the Visual Editor and do not require a publish action.
The <builder-content> component enables dynamic visual layouts for content entries and supports drag-and-drop editing.
An example with navigation links
This example uses a custom data model called site-settings, which includes a navigationLinks field of type list. Each link contains a linkURL and linkText sub-field.
The BuilderContent component uses the site-settings data model to fetch the most recent published entry of the site-settings model for rendering. The inline function takes three parameters, data, loading, and fullContent.
data(required): the resolved data from the Builder content. in this case is the structured data from the most recent entry of thesite-settingsmodel. If you’re using A/B testing,BuilderContentautomatically returns the winning variant without additional configuration.loading(optional): boolean indicating if thedatais still loading.fullContent(required for SSR): the raw data that the Content API returns, containing all A/B variations and metadata. If you use client-side rendering and don’t pass in acontentprop toBuilderContent,BuilderContentselects the most recent published entry of the model specified.
The video below shows using this example data model in the Visual Editor:
What's next
For more information on the variety of custom fields, visit Custom Fields.