Since official SolidJS starter template are vite-based we can easily use vite-plugin-pages to create automatic routing a.k.a file based routing with official solid-app-router package.
First create a new project by running these commands in your terminal:
> npx degit solidjs/templates/js my-app
> cd my-app
> npm i # or yarn or pnpm
> npm run dev # or yarn or pnpm
Or for TypeScript:
> npx degit solidjs/templates/ts my-app
> cd my-app
> npm i # or yarn or pnpm
> npm run dev # or yarn or pnpm
Then install the router dependencies:
> npm i solid-app-router
> npm i -D vite-plugin-pages@v0.18.2
Configure vite.config.js
:
import { defineConfig } from 'vite';
import solidPlugin from 'vite-plugin-solid';
+ import Pages from 'vite-plugin-pages';
export default defineConfig({
plugins: [
+ Pages({
+ react: true,
+ importMode: 'async',
+ }),
solidPlugin()
],
build: {
target: 'esnext',
polyfillDynamicImport: false,
},
});
Then src/index.jsx
:
import { render } from "solid-js/web";
import { Router } from "solid-app-router";
import App from "./App";
render(
() => (
<Router>
<App />
</Router>
),
document.getElementById("root")
);
And finally src/App.jsx
:
import { useRoutes, Link } from "solid-app-router";
import { lazy } from "solid-js";
import routes from 'virtual:generated-pages'
export default function() {
const Routes = useRoutes(routes.map(route => ({
...route,
component: lazy(route.component)
})));
return (
<>
<h1>Solid App</h1>
<ul>
<li><Link href="/">Home</Link></li>
<li><Link href="/about">About</Link></li>
</ul>
<Routes />
</>
);
}
Note: use
vite-plugin-pages
v0.18.2, the greater version contains breaking changes and the Solid implementation seems more complicated. :/
Top comments (0)