NumberField

通貨対応数値入力

プレビュー

¥
%

使いどころ

使う場面

  • 数量、金額、割合など、数値として扱う入力。step で増減の幅を決め、min / max で範囲を限る
  • 金額は currency(JPY など)で通貨記号と桁区切りを付ける。単位は suffix(%、件)で添える
  • 全角数字や「−」の入力を受けたい日本語のフォーム。全角は半角に直して解釈する

使わない場面

  • 郵便番号、電話番号、会員番号など、数値ではない数字の並び。先頭の 0 や区切りが意味を持つので Input を使う
  • 範囲の大まかな指定。選択肢が少なければ SegmentedControl か Select
  • 値が長い桁になる ID。桁区切りを付けて表示されてしまう

使い方

<NumberField
  label="金額"
  value={15000}
  currency="JPY"
  onValueChange={(v) => setValue(v)}
/>

プロパティ

名前型デフォルト説明
valuenumber | nullなし現在の数値
defaultValuenumber | nullなし初期値(非制御)
onValueChange(value: number | null) => voidなし値変更時のコールバック(旧 onChange)
minnumberなし最小値
maxnumberなし最大値
stepnumber1増減のステップ値
currency"JPY" | "USD" | "EUR" | "GBP" | "CNY" | "KRW"なし通貨コード
localestringなし数値の書式に使うロケール(既定は ja-JP)
showStepperbooleantrue増減ボタンを表示するか
labelstringなしラベル
errorbooleanfalseエラー状態
errorMessagestringなし入力欄の下に出すエラー文言(role="alert" で読み上げる)
prefixstringなし接頭辞テキスト(通貨で自動設定)
suffixstringなし接尾辞テキスト
decrementLabelstringなしAccessible label for decrement button (default: "減少")
incrementLabelstringなしAccessible label for increment button (default: "増加")

型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。

キーボード操作

キー動作
↑step の分だけ増やす
↓step の分だけ減らす
Enter入力を確定する(IME の変換中は確定しない)
Tab確定して次へ移る。増減ボタンはタブ移動の対象外

アクセシビリティ

  • 入力欄は type="text" に inputMode="decimal"。スクリーンリーダーでは数値入力ではなくテキスト欄として読まれる
  • 増減ボタンの名前は decrementLabel / incrementLabel で変える。既定は「減少」「増加」
  • label と errorMessage を自前で持つ。errorMessage は role="alert" で読み上げられ、aria-describedby で結ばれる
  • 値の確定はフォーカスが外れたとき。入力中は onValueChange が呼ばれない

文言

  • label に単位を含めない。単位は suffix や currency で見せる(label「割引率」、suffix「%」)
  • 範囲があるときは、description か errorMessage に「0 から 100 の間で入力してください」のように範囲を書く

関連するコンポーネント