---
title: ChoiceList
description: >-
Use choice lists to present a list of choices where buyers can make a single
selection or multiple selections.
api_version: 2023-10
api_name: checkout-ui-extensions
source_url:
html: >-
https://shopify.dev/docs/api/checkout-ui-extensions/2023-10/components/forms/choicelist
md: >-
https://shopify.dev/docs/api/checkout-ui-extensions/2023-10/components/forms/choicelist.md
---
# ChoiceList
Use choice lists to present a list of choices where buyers can make a single selection or multiple selections.
## ChoiceListProps
* name
string
required
An identifier for the field that is unique within the nearest containing `Form` component.
* value
T
required
A `string` or `string[]` indicating the ids of selected choices. When a string is set, choices render as radios. When a string array is set, choices render as checkboxes.
* onChange
(value: T) => void
required
A callback that is run whenever the choice list is changed. This callback is called with a string or array of strings indicating the ids of choices that should now be selected. This component is [controlled](https://reactjs.org/docs/forms.html#controlled-components), so you must store this value in state and reflect it back in the `value` prop.
Examples
## Preview

### Examples
* #### Basic ChoiceList
##### JS
```js
import {
extension,
ChoiceList,
Choice,
BlockStack,
InlineStack,
} from '@shopify/ui-extensions/checkout';
export default extension('purchase.checkout.block.render', (root) => {
const choiceList = root.createComponent(
ChoiceList,
{
name: 'choice',
value: 'first',
onChange: (value) => {
console.log(`onChange event with value: ${value}`);
},
},
[
root.createComponent(BlockStack, undefined, [
root.createComponent(Choice, {id: 'first'}, 'Ship'),
root.createComponent(Choice, {id: 'second'}, 'Pickup'),
]),
],
);
const multipleChoiceList = root.createComponent(
ChoiceList,
{
name: 'multipleChoice',
value: ['multipleFirst'],
onChange: (value) => {
console.log(`onChange event with value: ${value}`);
},
},
[
root.createComponent(BlockStack, undefined, [
root.createComponent(Choice, {id: 'multipleFirst'}, 'Gift message'),
root.createComponent(Choice, {id: 'multipleSecond'}, 'Gift wrapping'),
]),
],
);
const layout = root.createComponent(InlineStack, undefined, [
choiceList,
multipleChoiceList,
]);
root.appendChild(layout);
});
```
##### React
```tsx
import {
reactExtension,
ChoiceList,
Choice,
BlockStack,
InlineStack,
} from '@shopify/ui-extensions-react/checkout';
export default reactExtension(
'purchase.checkout.block.render',
() => ,
);
function Extension() {
return (
{
console.log(
`onChange event with value: ${value}`,
);
}}
>
Ship
Pickup
{
console.log(
`onChange event with value: ${value}`,
);
}}
>
Gift message
Gift wrapping
);
}
```
## Best Practices
* Include a title that either tells customers what to do or explains their available options.
* Label options clearly based on what the option will do.
* Avoid options that contradict each other when you’re allowing for multiple selections.
## Related
[Component - Choice](choice)
[Component - Checkbox](checkbox)