Skip to main content
lightning-record-edit-form provides full control over form layout while leveraging Lightning Data Service for data management. Use it when you need custom layouts, custom buttons, or custom validation logic.

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 RecordEditFormStaticContact extends LightningElement {
    accountField = ACCOUNT_FIELD;
    nameField = NAME_FIELD;
    titleField = TITLE_FIELD;
    phoneField = PHONE_FIELD;
    emailField = EMAIL_FIELD;

    @api recordId;
    @api objectApiName;
}
<template>
    <lightning-record-edit-form
        object-api-name={objectApiName}
        record-id={recordId}
    >
        <lightning-messages></lightning-messages>
        <lightning-input-field field-name={accountField}></lightning-input-field>
        <lightning-input-field field-name={nameField}></lightning-input-field>
        <lightning-input-field field-name={titleField}></lightning-input-field>
        <lightning-input-field field-name={phoneField}></lightning-input-field>
        <lightning-input-field field-name={emailField}></lightning-input-field>
        <div class="slds-var-m-top_medium">
            <lightning-button
                variant="brand"
                type="submit"
                name="save"
                label="Save"
            ></lightning-button>
        </div>
    </lightning-record-edit-form>
</template>

Dynamic Field Definition

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

export default class RecordEditFormDynamicContact extends LightningElement {
    @api recordId;
    @api objectApiName;
}
<template>
    <lightning-record-edit-form
        object-api-name={objectApiName}
        record-id={recordId}
    >
        <lightning-messages></lightning-messages>
        <lightning-input-field field-name="AccountId"></lightning-input-field>
        <lightning-input-field field-name="Name"></lightning-input-field>
        <lightning-input-field field-name="Title"></lightning-input-field>
        <lightning-input-field field-name="Phone"></lightning-input-field>
        <lightning-input-field field-name="Email"></lightning-input-field>
        <div class="slds-var-m-top_medium">
            <lightning-button
                variant="brand"
                type="submit"
                name="save"
                label="Save"
            ></lightning-button>
        </div>
    </lightning-record-edit-form>
</template>

Attributes

AttributeTypeRequiredDescription
object-api-nameStringYesAPI name of the object (e.g., ‘Contact’, ‘Account’)
record-idStringNoID of the record to edit. Omit to create a new record
record-type-idStringNoRecord type ID for record creation
densityStringNoDisplay density: ‘compact’, ‘comfy’, or ‘auto’ (default)

Child Components

lightning-input-field

Renders an input field with automatic type detection and validation:
<lightning-input-field
    field-name="Name"
    required
    value={nameValue}
    onchange={handleNameChange}
></lightning-input-field>

lightning-messages

Displays form-level error messages:
<lightning-messages></lightning-messages>

Events

EventDescriptionDetail
submitFired when the form is submitted{ fields }
successFired when the record is saved successfully{ id, fields }
errorFired when an error occurs{ detail }
loadFired when the record data is loaded{ records }
cancelFired when the user cancels the formNone

Features

  • Custom Layout: Full control over field placement and grouping
  • Custom Buttons: Add custom submit, cancel, or other action buttons
  • Field-level Control: Individual field attributes and event handlers
  • Validation: Built-in validation with custom error messages
  • Lightning Data Service: Automatic caching and data refresh
Always include lightning-messages to display form-level errors. Without it, users won’t see validation errors that aren’t tied to specific fields.
When creating a new record, omit the record-id attribute. Setting it to null or undefined may cause unexpected behavior.

Build docs developers (and LLMs) love