React Hook Form を Chakra UI と一緒に使ってみた
React Hook Form を Chakra UI と一緒に使ってみた。
フォームの実装とバリデーションの実装に React Hook Form を使ってみることにした。
既に Chakra UI を導入しているため組み合わせることになる。
一応公式に使い方が紹介されている。
このまま実装した際、私の環境だとエラーメッセージの部分がエラーになってしまった。
<FormErrorMessage>
{errors.password && errors.password.message?.toString()}
</FormErrorMessage>
このように message
の後ろに toString()
をつけてやると動作するようになった。
リンクの部分、当初は
{
"links": [
{
"name": "リンクタイトル1",
"url": "http://example.com"
},
{
"name": "リンクタイトル2",
"url": "http://example.com"
},
{
"name": "リンクタイトル3",
"url": "http://example.com"
}
]
}
こういう配列にしようとして、一応値を入れることはできた。
でもバリデーションエラーメッセージをどうしても正しく取り出せず、面倒になって配列をやめてしまった。
たぶん useFieldArray を正しく使えば実装できるはずで、今の実装は拡張性ゼロなので来週以降にやる気が出たら再チャレンジしたい。
2022/07/03 追記:useFieldArray にした → https://gitlab.com/k1350/sololog_gql/-/commit/9058763f632f177d4ba16411bcba8c961f260430
* * *
またリンクについては「リンクタイトルを入力したら URL は必須入力」という仕様を想定しており、このバリデーションの実装でかなり迷走したのだが
|
|
複合バリデーションはこの validate
というやつでよかった。
“react hook form password confirmation” でググって発見した。
一度 useEffect
内で setError
と clearErrors
を使ってバリデーションしようとしたらなぜか useEffect
が無限に呼び出されるようになり、原因不明である。
clearErrors
が無限呼び出しを生み出しているっぽいのだが……。
進捗
https://gitlab.com/k1350/sololog_gql/-/commit/19c610e8c23bfa9ee5b3108c5039187fd20349ca
おわり