Recipes: Dynamic routes
When creating frontend routing, often you might want to map a route by a given pattern. To achieve this, dynamic routing is needed.
Example of a case where dynamic routing could be used is when creating a user view with a dynamic ID to differentiate between multiple users.
const routes = [
{ path: "", component: "front-page" },
{ path: "user", component: "user-list" },
{ path: "user/:id", component: "user-profile" },
];
When navigating to /user/123, the id property of the view will be provided the paramter from the URL, in this case 123.
Dynamic route keys
Dynamic routes can provide any key they want as the dynamic part, and it will be matched by that key.
// In route
{ path: "user/:id", component: "user-profile" },
// In the view component when navigating to /user/123
console.log(this.id)
>>> 123
// In route
{ path: "table/:tableType", component: "table-view" },
// In the view component when navigating to /table/closed
console.log(this.tableType)
>>> "closed"
Pattern matching routes
If you want more control over the parameters your dynamic views accept, you can provide a pattern key for each key you want to check against.
const routes = [
{ path: "", component: "minimal-setup" },
{
path: "onlynumbers/:id",
pattern: {
// Matches routes with numbers as the :id
// /onlynumbers/123
// /onlynumbers/555
id: "[0-9]+"
},
component: "dynamic-view"
},
{
path: "onlynumbers/:id/thenword/:specialType",
pattern: {
id: "[0-9]+",
// Matches routes with one of the matched words
// /onlynumbers/123/thenword/foo
// /onlynumbers/123/thenword/bar
// /onlynumbers/123/thenword/baz
specialType: "(foo|bar|baz)"
},
component: "dynamic-view"
},
];