# EmailField Use an email field to conveniently and accurately capture merchant email addresses. ```tsx 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 ( setEmail(''), }} /> Entered Email: {email} ); }; export default reactExtension('pos.home.modal.render', () => ( )); ``` ```ts 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); }); ``` ## EmailField ### EmailFieldProps ### action value: `InputAction` A button under the text field to provide extra functionality. ### disabled value: `boolean` Whether the field can be modified. ### error value: `string` Indicates an error to the user. The field is given specific stylistic treatment to communicate problems that have to be resolved immediately. ### helpText value: `string` The label under the text field which provides guidance or instructions that assist users. ### label value: `string` The content to use as the field label. ### maxLength value: `number` The maximum number of characters allowed in the input field. ### onBlur value: `() => void` The callback when focus is removed. ### onChange value: `(value: string) => void` The callback when the user has finished editing a field. ### onFocus value: `() => void` The callback when input is focused. ### onInput value: `(value: string) => void` Callback when the user makes any changes in the field. As noted in the documentation for `onChange`, you **must not** use this to update `value` — use the `onChange` callback for that purpose. Use the `onInput` prop when you need to do something as soon as the user makes a change, like clearing validation errors that apply to the field as soon as the user begins making the necessary adjustments. ### placeholder value: `string` A short hint that describes the expected value of the field. ### required value: `boolean` Whether the field needs a value. ### value value: `string` The current value for the field. Defaults to now. You should update this value in response to the `onChange` callback. ### InputAction ### disabled value: `boolean` Whether the button can be pressed. ### label value: `string` The text displayed in the button. ### onPress value: `() => void` A callback to be performed.