Skip to main content
Migrate to Polaris

Version 2025-07 is the last API version to support React-based UI components. Later versions use web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the migration guide to upgrade your extension.

EmailField

The EmailField component captures email address input from customers with built-in validation. Use it to collect email information in forms, customer profiles, or contact workflows.

The component includes built-in email format validation using standard email patterns to ensure data quality. It provides real-time feedback on invalid entries and supports features like autocomplete and keyboard optimization for email input, helping merchants quickly capture valid customer contact information during checkout or registration workflows.

EmailField components integrate with browser autocomplete features to speed up email entry by suggesting previously used addresses, significantly reducing typing time during customer registration workflows.


Configure the following properties on the EmailField component.

Anchor to label
label
string
required

The content to use as the field label that describes the text information being requested.

Anchor to action
action

A button configuration object displayed under the text field to provide extra functionality.

Anchor to disabled
disabled
boolean

Controls whether the field can be modified. When true, the field is disabled and users cannot edit its value.

Anchor to error
error
string

An error message that indicates a problem to the user. The field is given specific stylistic treatment to communicate issues that must be resolved immediately.

Anchor to helpText
helpText
string

The label text displayed under the field that provides guidance or instructions to assist users.

Anchor to maxLength
maxLength
number

The maximum number of characters allowed in the text field.

Anchor to onBlur
onBlur
() => void

A callback function executed when focus is removed from the field.

Anchor to onChange
onChange
(value: string) => void

A callback function executed when the user has finished editing the field, receiving the new text value as a parameter. You should update the value property in response to this callback.

Anchor to onFocus
onFocus
() => void

A callback function executed when the field receives focus.

Anchor to onInput
onInput
(value: string) => void

A callback function executed immediately when the user makes any change in the field. Use this for real-time feedback, such as clearing validation errors as soon as the user begins making corrections. Don't use this to update the value property—the onChange callback is the appropriate handler for updating the field's value.

Anchor to placeholder
placeholder
string

A short hint that describes the expected value of the field.

Anchor to required
required
boolean

A boolean that indicates whether the field needs a value for form submission or validation purposes.

Anchor to value
value
string

The current text value for the field. If omitted, the field will be empty. You should update the value property in response to the onChange callback.


Anchor to Capture email input with validationCapture email input with validation

Capture customer email addresses with built-in format validation. This example shows how to implement an EmailField that validates email syntax in real-time, provides autocomplete support, and optimizes the keyboard for email entry, ensuring accurate customer contact information.

Capture email input with validation

Capture customer email addresses with built-in format validation. This example shows how to implement an EmailField that validates email syntax in real-time, provides autocomplete support, and optimizes the keyboard for email entry, ensuring accurate customer contact information.

Capture email input with validation

import React, {useState} from 'react';
import {
EmailField,
Screen,
ScrollView,
Navigator,
Text,
reactExtension,
} from '@shopify/ui-extensions-react/point-of-sale';

const SmartGridModal = () => {
const [email, setEmail] = useState('');
return (
<Navigator>
<Screen name="DateField" title="DateField Example">
<ScrollView>
<EmailField
label="Email"
placeholder="example@email.com"
helpText="Please enter a valid email"
value={email}
onChange={setEmail}
required={true}
action={{
label: 'Clear',
onPress: () => setEmail(''),
}}
/>
<Text>Entered Email: {email}</Text>
</ScrollView>
</Screen>
</Navigator>
);
};

export default reactExtension('pos.home.modal.render', () => (
<SmartGridModal />
));
import {
Navigator,
Screen,
ScrollView,
Text,
EmailField,
extension,
} from '@shopify/ui-extensions/point-of-sale';

export default extension('pos.home.modal.render', (root, api) => {
const clearHandler = () => {
emailField.updateProps({value: ''});
textBox.replaceChildren('');
};
const emailField = root.createComponent(EmailField, {
label: 'Email',
value: '',
action: {label: 'Clear', onPress: clearHandler},
});

const textBox = root.createComponent(Text);

const onChangeHandler = (newValue: string) => {
emailField.updateProps({value: newValue});

const textContent = `Selected Date: ${newValue}`;
textBox.replaceChildren(textContent);
};

emailField.updateProps({onChange: onChangeHandler});

const scrollView = root.createComponent(ScrollView);
scrollView.append(emailField);
scrollView.append(textBox);

const screen = root.createComponent(Screen, {
name: 'DateField',
title: 'Date Field Example',
});
screen.append(scrollView);

const navigator = root.createComponent(Navigator);
navigator.append(screen);

root.append(navigator);
});

  • Provide helpful guidance with placeholder and helpText: Use placeholder text for format examples like customer@example.com and the helpText property for additional context like "Required for digital receipts" or "We'll send order updates to this address."
  • Implement proper email validation: Use the error property to display validation messages when users enter invalid email formats. Provide clear, actionable error messages like "Please enter a valid email address" that help users correct their input.
  • Use the email-optimized keyboard: EmailField automatically display the email-optimized keyboard on mobile devices with easy access to @ and domain symbols. This improves input speed and reduces errors on touch devices.
  • Use the required property appropriately: Set required to true for fields that must have a value. While this adds semantic meaning, you must still implement validation logic and use the error property to display validation errors to users.
  • Add action buttons for enhanced functionality: Use the action property to provide helpful actions like "Validate Email," "Use Default Email," or "Clear Field." This enhances usability by providing quick access to common operations.
  • Differentiate between input and change callbacks: Use onInput for immediate feedback like clearing validation errors as soon as users start typing. Reserve onChange for updating the field value when editing is complete. Never use onInput to update the value property.

  • EmailField provides the input interface but doesn't perform automatic email validation—you must implement validation logic and use the error property to display validation results.
  • The required property adds semantic meaning only—it doesn't trigger automatic error display or prevent form submission without additional validation logic.
  • Action buttons are limited to simple press callbacks—complex action workflows require custom implementation or additional components.

Was this page helpful?