# Page
The outer wrapper of the page—including the page title, subtitle, and page-level actions—displayed in a familiar and consistent style that sets expectations about the purpose of the page.
### Basic Page
```tsx
import {
Page,
Button,
reactExtension,
} from '@shopify/ui-extensions-react/customer-account';
import React from 'react';
export default reactExtension('customer-account.page.render', () => <App />);
function App() {
return (
<Page
title="Order #1411"
subtitle="Confirmed Oct 5"
secondaryAction={<Button accessibilityLabel="Button" onPress={() => {}}/>}
primaryActionLabel="Manage"
primaryAction={
<>
<Button onPress={() => {}}>Buy again</Button>
<Button onPress={() => {}}>Second action</Button>
<Button onPress={() => {}}>Third action</Button>
</>
}
>
Content
</Page>
);
}
```
```js
import {
Page,
Button,
extension
} from '@shopify/ui-extensions/customer-account';
export default extension(
'customer-account.page.render',
(root, api) => {
renderApp(root, api);
},
)
async function renderApp(root, api) {
const primaryAction = root.createFragment();
await primaryAction.append(root.createComponent(Button, {onPress: () => {console.log("primary action 1")}}, 'Buy again primary 1'));
await primaryAction.append(root.createComponent(Button, {onPress: () => {console.log("primary action 2")}}, 'Buy again primary 2'));
await primaryAction.append(root.createComponent(Button, {onPress: () => {console.log("primary action 3")}}, 'Buy again primary 3'));
const secondaryAction = root.createFragment();
await secondaryAction.append(root.createComponent(Button, {accessibilityLabel: 'Button', onPress: () => {}}))
const page = root.createComponent(
Page,
{
title: "Order #1411",
subtitle: "Confirmed Oct 5",
primaryAction,
primaryActionLabel: "Manage",
secondaryAction,
},
root.createComponent('View', {}, "Content")
)
root.append(page);
}
```
## PageProps
### PageProps
### loading
Indicates that the page is in a loading state.
When `true`, the page shows loading indicators for the UI elements that it is owns. The page is not responsible for the loading indicators of any content that is passed as `children`.
### primaryAction
The action grouping, provided as button(s), that is placed in the primary position of the page.
### primaryActionAccessibilityLabel
Accessibility label for the primary action grouping. If an accessibility label is not provided, default text is used.
### primaryActionLabel
Label for the primary action grouping. If a label is not provided, default text is used.
### secondaryAction
The action grouping, provided as button(s), that is placed in the secondary position of the page.
### subtitle
The text to be used as subtitle.
### title
The text to be used as title.
## ButtonProps primaryAction
Supported props for Buttons used inside Page `primaryAction` prop.
`children` only support text.
### Docs_Page_Button_PrimaryAction
### accessibilityLabel
A label used for buyers using assistive technologies. When set, any `children` supplied to this component will not be announced to screen reader users.
### disabled
Disables the button, disallowing any interaction.
### loading
Replaces content with a loading indicator.
### loadingLabel
Accessible label for the loading indicator when user prefers reduced motion. This value is only used if `loading` is true.
### onPress
Callback that is run when the button is pressed.
### overlay
An overlay component to render when the user interacts with the component.
### to
Destination URL to link to.
## ButtonProps secondaryAction
Supported props for Button used inside Page `secondaryAction` prop.
`children` are not supported.
Use `accessibilityLabel` instead.
### Docs_Page_Button_SecondaryAction
### accessibilityLabel
A label used for buyers using assistive technologies. Needed because `children` passed to this component will be discarded.
### onPress
Callback that is run when the button is pressed.
### to
Destination URL to link to.