---
tags: brew-js-react
---
# Register view components
View components are associated to different paths using `registerView`.
In order to have route parameters recognized, router must be configured with known routes.
```typescript
app.useRouter({
routes: [
'/{view:product}/{id?}'
'/{view}'
]
});
```
When resolving for views, first route parameters are resolved from current path using configured routes. For examples:
| Path | Route parameters |
| ------------ | ------------------------- |
| `/home` | `{view:'home'}` |
| `/product` | `{view:'product'}` |
| `/product/1` | `{view:'product',id:'1'}` |
Then route parameters are matched with those passed to `registerView`.
```typescript
export const Home = registerView(() => "./views/Home", {
view: 'home'
});
export const Product = registerView(() => "./views/Product", {
view: 'product'
});
export const ProductInfo = registerView(() => "./views/ProductInfo", {
view: 'product',
id: /.+/
});
```
When combined, the view at `./views/Home` will be matched when visiting `/home`.
| Path | Matched views (in precendence) |
| ------------ | ------------------------------ |
| `/home` | `Home` |
| `/product` | `Product` |
| `/product/1` | `ProductInfo`, `Product` |
:::info
When multiple views match, views registered with more parameters takes precedence. See [Render views](/lIu97Gu3T1GMELKLvA5SYg).
:::
## Regex and callback
Dynamic data in routes can be matches using regex or callback.
For example, if `ProductInfo` is registered with:
```typescript!
registerView(() => "./views/ProductInfo", {
view: 'product',
id: /^\d+$/
});
```
then it will match `/product/1` but not `/product/foo`.
## Exclusion by `null`
To match a route without a certain parameter, use `null`.
For example, if `Product` is registered with:
```typescript!
registerView(() => "./views/Product", {
view: 'product',
id: null
});
```
Then it will not match `/product/1` since resolved route parameter `id` is not empty.
## Directly register component without import
==Since `v0.3.1`==
It is possible to register components without async import:
```typescript
const MyView = registerView(function MyViewImpl () {
return (<div>...</div>);
});
```