つまりReactフォーム界のHANAMASAということ。
良い特徴、あるいはReact Hook Formとの違い
1. refに依存していない
自作するとわかるのですが、Formの状態管理(およびバリデーション)は素朴な実装だとあっという間にUIをブロックするレベルでパフォーマンスが劣化します。
Reactが難しい、と言われる一つの原因ですね。
React Hook Formは各inputをUncontrolled Formとする代わりに、状況に応じてDOMを直接操作することで、普通のフォームであれば適当に実装してもパフォーマンス劣化が起こりにくいです。
昔はrefを直接渡していたようにおもえますが、いまは <input {...register('hoge')} />
というようにインターフェースを隠蔽することが推奨されています。もしかしたら将来的にrefを排除することも考えている可能性はあります*1が、少なくとも直近のバージョンではそうでした。
APIがシンプルでパフォーマンスも素晴らしい、いいことづくめじゃん!と思われるかもしれませんが、当然デメリットがあります。
というかちょっと使い込んだらデメリットがモリモリと明らかになったのが今回フォームライブラリを自作した理由の一つです。
例えば……refに依存している以上、中身の挙動がDOM操作なので初期値の導入まわりでReactのlifecycleと競合を起こします。
またuncontrolledな中身をref越しにどうやって操作しているのかはブラックボックスです。なので useImperativeHandle
を使っていると意味不明なエラーが出まくります。
またこの シンプルなAPI
は簡単なフォームの作成に特化しているので、refを公開しないような自作あるいはサードパーティの複雑なformを使い始めた瞬間にコード量が増え、APIは非直観的なものになります。
これらを解決するために作ったのがMayoigaです。
ゆえに「 useImperativeHandle
なんてつかわねーよ!」というプロジェクトであれば、あるいはrefへの依存に居心地の悪さを感じないのであればHook Formで十分かもしれません。
2. バリデーション前と後で違う型をつけられる、その他の場所でも型がめっちゃつく
はい。
*1:refなしであのシンプルなAPIを保てるとはおもえないですけども