Remixが本日リリースされた
RemixはOSSになる前に調べていて注目しているフレームワーク
インストールして試してみる
$ npx create-remix@latest
インストーラーに従ってもろもろ環境を選択して実行
$ npm run dev
http://localhost:3000
でサンプルアプリケーションが立ち上がる
前回調べたときのRemixの特徴のファイルルーティングシステムを確認してみる
ファイルルーティングシステムとは、ルーティング用の設定ファイルをつくらずともファイルをおけばそこにパスが通る仕組み
試しにまず、以下のような/app/routes/gists.js
をつくる
import { Outlet } from "remix"; export default function Gists() { return ( <div> <h1 className="text-3xl bold">Gists</h1> <Outlet /> </div> ) }
これだけで、http://localhost:3000/gists
にアクセすると、上のページが表示される
上のソースのOutlet
はパスの子階層のコンポーネントが埋め込まれる
例えば、/app/routes/gists
ディレクトリをつくり、そこにindex.tsx
という以下のようなファイルをつくると
export default function GistsIndex() { return ( <h2 className="text-xl">Gists Index</h2> ) }
<Outlet />
の箇所にこのindex.tsxがレンダリングされて表示される
存在しないパスを指定した場合は、404ページを表示してくれる
これは/app/root.tsx
内のCatchBoundary
内でハンドリングしているみたい
export function CatchBoundary() { let caught = useCatch(); let message; switch (caught.status) { case 401: message = ( <p> Oops! Looks like you tried to visit a page that you do not have access to. </p> ); break; case 404: message = ( <p>Oops! Looks like you tried to visit a page that does not exist.</p> ); break; default: throw new Error(caught.data || caught.statusText); } return ( <Document title={`${caught.status} ${caught.statusText}`}> <Layout> <h1> {caught.status}: {caught.statusText} </h1> {message} </Layout> </Document> ); }
チュートリアルがあったのでやろうと思ったが、クラスメソッドの@_hiromosihigeさんが早速記事にしていたのでこれを眺めるだけにした
時間があったらやる
あとは、http://remix.new にアクセスするとすぐ試せるみたい