Version 2025-07 is the last API version to support React-based UI components. Later versions use Polaris web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the upgrade guide to upgrade your extension and avoid being blocked from updating your extension after October 1st 2026.
Choice
The choice component creates individual selectable options within a choice list. The wrapping choice list component dictates whether the choice renders as a radio button or checkbox.
Supported targets
- Customer
Account::Kitchen Sink - customer-account.
footer. render-after - customer-account.
order-index. announcement. render - customer-account.
order-index. block. render - customer-account.
order-status. announcement. render - customer-account.
order-status. block. render - customer-account.
order-status. cart-line-item. render-after - customer-account.
order-status. cart-line-list. render-after - customer-account.
order-status. customer-information. render-after - customer-account.
order-status. fulfillment-details. render-after - customer-account.
order-status. payment-details. render-after - customer-account.
order-status. return-details. render-after - customer-account.
order-status. unfulfilled-items. render-after - customer-account.
order. action. menu-item. render - customer-account.
order. action. render - customer-account.
order. page. render - customer-account.
page. render - customer-account.
profile. addresses. render-after - customer-account.
profile. announcement. render - customer-account.
profile. block. render - customer-account.
profile. company-details. render-after - customer-account.
profile. company-location-addresses. render-after - customer-account.
profile. company-location-payment. render-after - customer-account.
profile. company-location-staff. render-after - customer-account.
profile. payment. render-after
Supported targets
- Customer
Account::Kitchen Sink - customer-account.
footer. render-after - customer-account.
order-index. announcement. render - customer-account.
order-index. block. render - customer-account.
order-status. announcement. render - customer-account.
order-status. block. render - customer-account.
order-status. cart-line-item. render-after - customer-account.
order-status. cart-line-list. render-after - customer-account.
order-status. customer-information. render-after - customer-account.
order-status. fulfillment-details. render-after - customer-account.
order-status. payment-details. render-after - customer-account.
order-status. return-details. render-after - customer-account.
order-status. unfulfilled-items. render-after - customer-account.
order. action. menu-item. render - customer-account.
order. action. render - customer-account.
order. page. render - customer-account.
page. render - customer-account.
profile. addresses. render-after - customer-account.
profile. announcement. render - customer-account.
profile. block. render - customer-account.
profile. company-details. render-after - customer-account.
profile. company-location-addresses. render-after - customer-account.
profile. company-location-payment. render-after - customer-account.
profile. company-location-staff. render-after - customer-account.
profile. payment. render-after
Anchor to PropertiesProperties
Configure the following properties on the Choice component.
- Anchor to idididstringstringrequiredrequired
A unique identifier for the choice.
- Anchor to accessibilityLabelaccessibility
Labelaccessibility Label stringstring A label used for buyers using assistive technologies. When set, any
childrensupplied to this component will not be announced to screen reader users.- Anchor to detailsdetailsdetailsstring | RemoteFragmentstring | RemoteFragment
Additional content to be revealed when selected.
- Anchor to disableddisableddisabledbooleanboolean
Whether the choice can be changed.
- Anchor to primaryContentprimary
Contentprimary Content string | RemoteFragmentstring | RemoteFragment The primary content for a choice. Rendered below
<label>.- Anchor to secondaryContentsecondary
Contentsecondary Content string | RemoteFragmentstring | RemoteFragment The secondary label content for a choice in a
groupChoiceList. Ignored inbasevariant. Rendered on the opposite side to- Anchor to tertiaryContenttertiary
Contenttertiary Content string | RemoteFragmentstring | RemoteFragment The tertiary label content for a choice in a
groupChoiceList. Ignored inbasevariant. Rendered belowand.
Anchor to ExamplesExamples
Anchor to Create a selectable optionCreate a selectable option
Use choice to define an individual selectable option inside a choice list. This example shows a single choice rendered as a radio button.Create a selectable option

Create a selectable option
React
import {
reactExtension,
Choice,
ChoiceList,
InlineStack,
} from '@shopify/ui-extensions-react/customer-account';
export default reactExtension(
'customer-account.page.render',
() => <Extension />,
);
function Extension() {
return (
<InlineStack>
<ChoiceList
name="ship"
value="ship-1"
onChange={(value) => {
console.log(
`onChange event with value: ${value}`,
);
}}
>
<Choice id="ship-1">Ship</Choice>
</ChoiceList>
<ChoiceList
name="gift"
value={['gift-1']}
onChange={(value) => {
console.log(
`onChange event with value: ${value}`,
);
}}
>
<Choice id="multipleFirst">
Gift message
</Choice>
</ChoiceList>
</InlineStack>
);
}JS
import {
extension,
ChoiceList,
Choice,
InlineStack,
} from '@shopify/ui-extensions/customer-account';
export default extension('customer-account.page.render', (root) => {
const choiceList = root.createComponent(
ChoiceList,
{
name: 'ship',
value: 'ship-1',
onChange: (value) => {
console.log(`onChange event with value: ${value}`);
},
},
[root.createComponent(Choice, {id: 'ship-1'}, 'Ship')],
);
const multipleChoiceList = root.createComponent(
ChoiceList,
{
name: 'gift',
value: ['gift-1'],
onChange: (value) => {
console.log(`onChange event with value: ${value}`);
},
},
[root.createComponent(Choice, {id: 'gift-1'}, 'Gift message')],
);
const layout = root.createComponent(InlineStack, undefined, [
choiceList,
multipleChoiceList,
]);
root.appendChild(layout);
});Anchor to Best practicesBest practices
- Include a descriptive title: Tell customers what to do or explain their available options.
- Label options clearly: Base labels on what the option does, not technical values.
- Avoid contradictory options: When allowing multiple selections, don't include options that conflict with each other.
Anchor to LimitationsLimitations
- Must be used as a child of choice list.