shiftB
instagramyoutube
運営会社プライバシーポリシー特定商取引法に基づく表記JavaScript学習サイト JS Gym
お問い合わせ
©2025 bubekichi inc.

【React Hook Form】useFormに渡してはいけない型

0
XThreads
受講生ブログ

【React Hook Form】useFormに渡してはいけない型

user
吉本茜

【React Hook Form】useFormに渡してはいけない型

公開: 2025年04月30日

Tips
要約
  • useFormに配列を直接渡すとバグが発生するため、オブジェクト形式で渡すべきである。
  • useFormの内部処理では初期値がオブジェクトであることが前提になっている。
  • ドキュメントに明記されていないため注意が必要である。
音声で記事を再生
0:00

はじめに

ハマったので共有します。

結論

配列を直接渡してはいけない

大事なことなのでもう一度。

配列を直接渡してはいけない!!!!

例

バグる例

useForm<string[]>

正しい例

useForm<{obj:string[]}>

なぜダメなのか

内部の処理をリポジトリfork→cloneして確認しました。

useFormのProps

props: UseFormProps<TFieldValues, TContext, TTransformedValues> = {}

TFieldValuesを普段型引数として使う、
オプション引数は空のオブジェクト

ここでは問題になりません。エラーも吐かれません。

UseFormProps(型定義)

defaultValues: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>;

渡した型とdefaultValuesを一致させるだけなので別に問題ないです。
関数も渡せるんですね・・(小声)

createFormControlで初期設定する

ここが心臓部分みたいな処理です。
初期値をここで設定します。

let _defaultValues =
    isObject(_options.defaultValues) || isObject(_options.values)
      ? cloneObject(_options.values || _options.defaultValues) || {}
      : {};

isObjectの中身

import isDateObject from './isDateObject';
import isNullOrUndefined from './isNullOrUndefined';

export const isObjectType = (value: unknown): value is object =>
  typeof value === 'object';

export default <T extends object>(value: unknown): value is T =>
  !isNullOrUndefined(value) &&
  !Array.isArray(value) &&     //←ここ!!!falseになる
  isObjectType(value) &&
  !isDateObject(value);

配列をオブジェクトとして扱わないために初期値が空のオブジェクトになっているというわけです。。。

useWatchの中身(/utils/get.ts)もオブジェクトであること前提な処理になっていて、これ以上は確認していないのですが、恐らくセットするときとかもオブジェクト前提になってるんじゃないかなと思いました。

おわりに

ドキュメントにも「オブジェクト以外渡してくれるな」って書いてあるの見当たらないし時間溶かしました。
ご注意ください。

0

シェア!

XThreads
ShiftB Logo
user
吉本茜
山口在住/二児の母/エンジニア
プロフィールを見る
Loading...
記事一覧に戻る
ShiftB Logo
XThreads
0

関連記事

13章実務課題を終えての感想

icon
安藤奏

【チーム開発】技術的に大変だったこと

user
吉本茜

エンジニア転身してから4ヶ月の振り返り

user
吉本茜

AIにコードを書かせれば十分?それで本当に仕事になりますか?

icon
タマネギ

【実録Q&A】初学者に伝授したデバッグ思考の体系化

user
吉本茜

【13章】実務体験課題の感想

icon
はやと

最新記事

転職して1か月の振り返り

icon
tomoe

【12章】オリジナルアプリ制作の振り返り

icon
三嶋雅幸

AIで理解を作る学び方⭐️ わからない単語だらけでも前に進むための思考フロー

user
吉本茜

12章 オリジナルアプリ制作を終えて (WEBアプリ開発のコツを掴みかけたような気がする)

icon
青栁幸助

【1章】事前準備の振り返り

user
大西晴空

【2章】Webアプリケーション概要の振り返り

user
大西晴空