前回に引き続き以下の記事に沿ってとりあえずBlitzを触ってみる。
前回の記事 で問題になったPrismaの破壊的変更によるmigrateのエラーは既に解消されていた。
うれしい。
目次
blitz generate
1 | blitz generate all memo title:string body:string belongsTo:user |
これだけでDB構成とシンプルなCRUDが生成される。
本当にまるでRailsだ。
既に生成済みのファイルにエラーが表示されているのが見える。app/memos/pages/memos/index.tsx
memoの一覧画面のtsx 26行目、
1 | <a>{memo.name}</a> |
のnameがテキストエディタによってエラーだと表示されている。
さっきコマンドでtitleとbodyとuserって入れたのに、ここは調整してくれない(自動で1つめに調整してほしい)。
とりあえずさっき書いたtitleに変えておく。
1 | <a>{memo.title}</a> |
これでエラーが消える。
実行前にエディタがエラーだと教えてくれるのはTypeScriptの大きな恩恵。
入力画面の調整
まずは app/memos/components/MemoForm.tsx
フォームの方を調整する。
サイトに沿って以下を追記した。
1 | <input placeholder='タイトル' defaultValue={initialValues.title} /> |
いや、この辺もgenerate時にいい感じになってもらえないんだろうか。
あとは app/memos/pages/memos/new.tsx
投稿ページの調整。
1 | // 中略 |
ここでいくつか注目した。
ひとつめ、ユーザー認証がわかりやすい。
1 | import { useCurrentUser } from "app/hooks/useCurrentUser" // ユーザー認証Hooks読み込み |
なんとなく見てもわかるコードって本当に助かる。
ふたつめ、ルーター制御もわかりやすい。
1 | router.push(`/memos/${memo.id}`) |
いや、これ以上無いよく見るコード。
助かる。
みっつめ、フォームの情報の取得はどうにかならんのか。
1 | data: { |
せっかくいい感じにtype管理してるのに event.target[0].value
使わなきゃなのか?とちょっともやもやしている。
だって event.target[0].value
はany型だし。
ていうか、最初に選んだReact Final Formとやらを使えばいい感じにできるのかな。
お酒飲みながらぼちぼちReact Final Form勉強してみようかな。