# 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.
```tsx
import {
Page,
Button,
reactExtension,
} from '@shopify/ui-extensions-react/customer-account';
import React from 'react';
export default reactExtension('customer-account.page.render', () => );
function App() {
return (
{}}/>}
primaryActionLabel="Manage"
primaryAction={
<>
>
}
>
Content
);
}
```
```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
value: `boolean`
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
value: `RemoteFragment`
The action grouping, provided as button(s), that is placed in the primary position of the page.
### primaryActionAccessibilityLabel
value: `string`
Accessibility label for the primary action grouping. If an accessibility label is not provided, default text is used.
### primaryActionLabel
value: `string`
Label for the primary action grouping. If a label is not provided, default text is used.
### secondaryAction
value: `RemoteFragment`
The action grouping, provided as button(s), that is placed in the secondary position of the page.
### subtitle
value: `string`
The text to be used as subtitle.
### title
value: `string`
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
value: `string`
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
value: `boolean`
Disables the button, disallowing any interaction.
### loading
value: `boolean`
Replaces content with a loading indicator.
### loadingLabel
value: `string`
Accessible label for the loading indicator when user prefers reduced motion. This value is only used if `loading` is true.
### onPress
value: `() => void`
Callback that is run when the button is pressed.
### overlay
value: `RemoteFragment`
An overlay component to render when the user interacts with the component.
### to
value: `string`
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
value: `string`
A label used for buyers using assistive technologies. Needed because `children` passed to this component will be discarded.
### onPress
value: `() => void`
Callback that is run when the button is pressed.
### to
value: `string`
Destination URL to link to.