How to add routing to Svelte SPA with Routify
Are you building a SPA (single page application) with Svelte?
If so, you’re going to need a routing system. In this article I’ll be using a Svelte tool called Routify.
What is Routify?
Routify is a Svelte package that lets you create routes, based on a filesystem-based routing.
For example, if you create index.svelte, this would be equivalent to /
.
If you create about.svelte, this would be equivalent to /about
.
Why use Routify?
There’s usually 2 methods to building routes, a configuration style or a file structure type.
Personally, I’ve worked with large routing configurations, and that ain’t no fun.
Filesystem-based routing is simple, and it’s easier to debug. Tools such as Sapper, and Next.JS use this type of method.
And it’s proven to be reliable, and easy for development.
Adding Routify routing to your Svelte application
Step 1: Install Routify
This is a simple step. You can install the module via NPM.
npm i --save-dev @sveltech/routify@next npm-run-all
You will also be install another module called npm-run-all
.
npm-run-all
is a neat module to run multiple npm scripts in parallel.
Step 2: Update package.json file
Now that you’ve installed the 2 NPM modules above, you must update your package.json file and add the following NPM scripts.
"scripts": {
"dev": "run-p watch:routify watch:rollup",
"watch:rollup": "rollup -c -w",
"watch:routify": "routify"
}
When you run your dev environment, make sure to use npm run dev
.
Step 3: Update your App.svelte file
The next step is to import the Router
Svelte component and the routes configuration.
Those can be found within the @sveltech/routify
module.
<script>
import { Router } from '@sveltech/routify';
import { routes } from '@sveltech/routify/tmp/routes';
</script>
<Router {routes} />
That’s it!
The heavy lifting is done now. You can get started, and create your pages.
Step 4: Create your pages
Make sure to create a directory called pages
in the same directory level where the App.svelte file is.
- Svelte project
- src
- pages
- index.svelte
- about.svelte
- App.svelte
Like mentioned above, whatever you name your file, that will be the URL path name.
How to add dynamic routing
Sometimes your app will need some dynamic data in the URL, and you’ll want to make it a pretty URL as well.
You want to go from /post?id=31
to /post/31
.
To achieve this level of dynamic routing, and pretty URL’s you’ll need to name your page Svelte files as such – [post].svelte
The brackets ([]
) let Routify know that this will accept dynamic parameters.
Accessing the dynamic parameters
Accessing the route parameters is really simple also.
Import the params
helper tool, to get access to the current route parameters.
<!-- src/pages/post/[postId].svelte -->
<script>
import { params } from '@sveltech/routify';
export let postId;
console.log($params)
</script>
If you now visit the path /post/31
, for example. You should see the following print on your console.
{ postId: "31" }
How to navigate to another page
Navigating is another crucial key component to routing. This is how it’s done with Routify.
Start by importing the url()
helper function in your Svelte component.
And use the function inside the href
attribute of link tag element.
<script>
import { url } from '@sveltech/routify'
</script>
<!-- relative -->
<a href={$url('../')}>Home page</a>
<!-- absolute -->
<a href={$url('/')}>Home page</a>
<!-- params -->
<a href={$url('/post/:id', {id: '31'})}>Post 31</a>
You can do relative, and absolute paths.
You may also pass unique parameter values if you pass a second argument to the url()
function.
I like to tweet about Svelte and post helpful code snippets. Follow me there if you would like some too!