Skip to main content
lightning-record-view-form displays record data in read-only mode with full layout control. Use it when you need to create custom read-only views of record data.

Usage

Static Field Definition

Import field schema references and expose them to the template:
import { LightningElement, api } from 'lwc';

import ACCOUNT_FIELD from '@salesforce/schema/Contact.AccountId';
import NAME_FIELD from '@salesforce/schema/Contact.Name';
import TITLE_FIELD from '@salesforce/schema/Contact.Title';
import PHONE_FIELD from '@salesforce/schema/Contact.Phone';
import EMAIL_FIELD from '@salesforce/schema/Contact.Email';

export default class RecordViewFormStaticContact extends LightningElement {
    accountField = ACCOUNT_FIELD;
    nameField = NAME_FIELD;
    titleField = TITLE_FIELD;
    phoneField = PHONE_FIELD;
    emailField = EMAIL_FIELD;

    @api recordId;
    @api objectApiName;
}
<template>
    <lightning-record-view-form
        object-api-name={objectApiName}
        record-id={recordId}
    >
        <lightning-output-field field-name={accountField}></lightning-output-field>
        <lightning-output-field field-name={nameField}></lightning-output-field>
        <lightning-output-field field-name={titleField}></lightning-output-field>
        <lightning-output-field field-name={phoneField}></lightning-output-field>
        <lightning-output-field field-name={emailField}></lightning-output-field>
    </lightning-record-view-form>
</template>

Dynamic Field Definition

Specify field names directly as strings:
import { LightningElement, api } from 'lwc';

export default class RecordViewFormDynamicContact extends LightningElement {
    @api recordId;
    @api objectApiName;
}
<template>
    <lightning-record-view-form
        object-api-name={objectApiName}
        record-id={recordId}
    >
        <lightning-output-field field-name="AccountId"></lightning-output-field>
        <lightning-output-field field-name="Name"></lightning-output-field>
        <lightning-output-field field-name="Title"></lightning-output-field>
        <lightning-output-field field-name="Phone"></lightning-output-field>
        <lightning-output-field field-name="Email"></lightning-output-field>
    </lightning-record-view-form>
</template>

Attributes

AttributeTypeRequiredDescription
object-api-nameStringYesAPI name of the object (e.g., ‘Contact’, ‘Account’)
record-idStringYesID of the record to display
densityStringNoDisplay density: ‘compact’, ‘comfy’, or ‘auto’ (default)

Child Components

lightning-output-field

Renders a read-only field with automatic formatting:
<lightning-output-field
    field-name="Name"
    variant="label-inline"
></lightning-output-field>
Attributes:
AttributeTypeDescription
field-nameString or FieldIdField API name or schema reference
variantStringDisplay variant: ‘standard’ (default) or ‘label-inline’

Events

EventDescriptionDetail
loadFired when the record data is loaded{ records }
errorFired when an error occurs loading the record{ detail }

Features

  • Custom Layout: Full control over field placement and grouping
  • Automatic Formatting: Fields are formatted based on their type
  • Lightning Data Service: Leverages LDS caching for performance
  • Read-only: No editing capabilities, pure display mode
  • Responsive: Adapts to different screen sizes
lightning-record-view-form requires a valid record-id. Unlike lightning-record-edit-form, it cannot be used to create new records.

Use Cases

  • Custom Detail Pages: Create custom layouts for record detail views
  • Related Record Display: Show related record information
  • Dashboard Widgets: Display key record data in dashboards
  • Summary Panels: Show record summaries in custom applications

Build docs developers (and LLMs) love