# RouteDestination

`RouteDestination` contains a [`ViewSet`](#viewset) object. [`RouteHandler.new()`](/docs/platform/lwr/references/csr-reference/new.md) takes a `RouteHandlerCallback` containing a `RouteDestination`. [`RouteHandler.update()`](/docs/platform/lwr/references/csr-reference/update.md) takes a `RouteHandlerCallback` containing a `RouteDestination`.

## Syntax

```javascript
type RouteDestination {
    viewset: ViewSet;
}
```

## Properties

| Property  | Type               | Required/Optional | Description                                            |
| --------- | ------------------ | ----------------- | ------------------------------------------------------ |
| `viewset` | A `ViewSet` object | Required          | A `ViewSet` object that specifies the view to display. |

## ViewSet

The view to display. Supply a `ViewSet` object to a [`RouteDestination`](/docs/platform/lwr/references/csr-reference/routedestination.md).

### Properties

| Property   | Type   | Required/Optional | Description                                                                                                                                                                                                                                                                                |
| ---------- | ------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `viewName` | String | Required          | The `viewName` key maps to the `viewName` property for the [`outlet`](/docs/platform/lwr/guide/lwr-outlets.md). It accepts **either**: <ul><li>a Promise to a route handler module: `{ default: import('my/routeHandler') }`.</li><li>a [`ViewInfo` object](#viewinfo)</li></ul></li></ul> |

:::note
In LWR, modules are always provided via a Promise object. Promises allow the module code to be lazily loaded, improving application performance.
:::

### Syntax

```sfdocs-code {"lang":"javascript", "title": "ViewSet with Promise"}
interface ViewSet {
    [viewName: string]: (() => Promise<Module>) | ViewInfo;
}
```

:::note
If a single page reference maps to more than one view, you can specify more than one outlet where each outputs a different view component. For example: `{ default: import('my/routeHandler'), sidebar: import('my/sideHandler'), footer: import('my/footerHandler') }`. Check out [Outlets](/docs/platform/lwr/guide/lwr-outlets.md) for more information about using multiple outlets.
:::

## ViewInfo

An object containing a Promise to a route handler module and a string specifier for the module. Supply a `ViewInfo` object to a [`ViewSet` object](#viewset).

### Properties

| Property | Type    | Required/Optional | Description                                                                                                                                                                                                                                                                                                 |
| -------- | ------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `module` | Promise | Required          | A promise to a route handler module.                                                                                                                                                                                                                                                                        |
| `string` | String  | Required          | A string specifier for the module, like `my/recipePage`. Simple or straightforward use cases typically don't require a specifier. In other cases, the specifier for the module can't be determined from a Promise alone, so you should manually define the module's string specifier for the route handler. |

### Syntax

```javascript
interface ViewInfo {
    module: () => Promise<Module>
    specifier: string;
}
```

**See Also**

- [Route Handler Modules](/docs/platform/lwr/guide/lwr-route-handler-modules.md#routehandlercallback-and-routedestination)
