Remixのチュートリアルをやってみる
ついこの間Next.jsのチュートリアルをやってみた。
流れで、Next.jsの後発であり、最近良く比較されているRemixのチュートリアルも触ってみる。
Next.jsとRemix、どこが同じでどう違うか、どんな比較がされているか、はZennのみならずいろんなところに記事があるので各自お読みください。
Remixのチュートリアルは比較的短いのでサラッとやりたい所存
Setup
ひとまずセットアップしてnpm run dev
。
ずいぶんトラディショナルなフォームが出てきた
http://localhost:5173
の5173
って変な数字だけどなに?って思ったら、
これ自体はVite由来のポート番号で、LEET表記のSITE
説と5をローマ数字のⅤとしてVITE
説があるらしい
Fun fact: Vite's default port is 5173 which spells VITE if you think about it. Notice the commit branch was named 'vite-port-riddle'. : r/programming
The Root Route
Root Route
、日本語にしちゃうと「ルートルート」か…
<Meta>
とか<Form>
とかのコンポーネントってReact由来?Remix独自?
そのへんの解説はもうちょい後かな
Adding Stylesheets with links
あんたまたえらい急におしゃれになってもうて……
これやってることはAngularのこれと一緒か
@Component({
// ...
styleUrls: ['./foo.component.css']
})
The Contact Route UI
Now if we click one of the links or visit /contacts/1 we get ... nothing new?
nothing new?
とちゃうねん
<Form>
内の<button>
が全部しっかりsubmitしてるの、SPAの時代じゃないんだなーを感じる
SPAだとAjax通信が前提になるから、submitって「<form>
内に雑な<button>
が1個だけ置かれてるときに発生してしまうやつ」だった
Nested Routes and Outlets
これはAngularでおなじみの<router-outlet>
だ
Next.jsだと{children}
か
RemixはReact Routerというのを使ってるらしい
Next.jsのディレクトリ内に置いたpage
やlayout
がいろんな部品として使われていく感じとは感覚が違って、かなりAngularっぽさ(htmlとかcssを全部tsファイルに詰め込んだ感じ)がある
Client Side Routing
じゃあこれは<a [routerLink]="foo">
か
Loading Data
静的jsファイルと、DBから取得した(ていの)jsonがそれぞれ降ってくるのか
Next.jsのDBアクセスではバックエンドでhtmlまで作ってたけど、この違いってなんだ?
<li key={contact.id}>
のkey
属性ってなに???
→Reactの制御に必要らしい Angularの@for
でいうtrack:
か
Type Inference
やってることはgenericsなのに、genericsって言葉が全く出てこないのが気になる
URL Params in Loaders
URLパラメータとかパスパラメータとか言われるやつを取得する方法
Validating Params and Throwing Responses
パラメータ取得と、パラメータに応じたデータがなかったときのエラー処理
Remixのチュートリアル書いてる人、テンション高いというか筆が乗ってるというか、壇上で喋ってる人って感じがしませんか???
いったんここまで。
Tutorial(30m)
30分…?30分で終わる内容か……??
Data Mutations
ここは座学の時間。
Creating Contacts
This is where the "old school web" programming model shows up.
Next.jsやったときも思ったけど、やっぱりオールドスクールなwebアプリへの回顧がキてますよね?
というかオールドスクールな概念の上をモダンな方法で走ってるって感じがある
Updating Data
<Form key={contact.id} id="contact-form" method="post">
editなのにpostメソッドなの???
Updating Contacts with FormData
Fill out the form, hit save, and you should see something like this! (Except easier on the eyes and maybe less hairy.)
筆者ノリノリじゃん
Mutation Discussion
前のチャプターの詳細についての座学。
actionとloaderがそれぞれデータの取得と更新をやるの、わかりやすくていいな
Aside from the action function, none of these APIs we're discussing are provided by Remix: request, request.formData, Object.fromEntries are all provided by the web platform.
action関数を除くと、これらのAPIはRemixが提供するものではありません。request、request.formData、Object.fromEntriesはすべてWebプラットフォームによって提供されます。
これが「web標準技術に寄せていく」っていうRemixのコンセプトのところですよね?
Redirecting new records to the edit page
new record
を作ると同時にeditページにリダイレクトする
こういうときに空データを作るの本当に嫌いなんですよね…
Active Link Styling
ほぼサイドバー専用の<Link>
かと思ったけど、isPending
が使い勝手よさそう?
2重submit防止とかに使えるとかある???
Global Pending UI
ローディング表示。
Deleting Records
これもオールドスクールなwebアプリっぽい
ページ全体の再読み込みを防ぐためにfetchを使うの、10年前にやってたこういうやり方を思い出す…
targetのiframeを高さ/幅0にして、画面はそのままだけど裏でデータいじるってことをやってた気がする
Index Routes
_index.tsx
の使い方
急に気づいたけど、チュートリアルページのスクショのポート番号が全部3001になってるんだ
Cancel Button
戻るボタン
ダラダラやってるからにしても結構時間かかるんですが???