NumberInput
NumberInputは、ユーザーからの数値入力を取得するために使用されるコンポーネントです。
<NumberInput placeholder="placeholder" />
使い方
import { NumberInput } from "@yamada-ui/react"
import { NumberInput } from "@/components/ui"
import { NumberInput } from "@workspaces/ui"
<NumberInput />
バリアントを変更する
<VStack>
<For each={["outline", "filled", "flushed"]}>
{(variant) => (
<NumberInput
key={variant}
variant={variant}
placeholder={toTitleCase(variant)}
/>
)}
</For>
</VStack>
サイズを変更する
<VStack>
<For each={["xs", "sm", "md", "lg", "xl"]}>
{(size) => (
<NumberInput key={size} size={size} placeholder={`Size (${size})`} />
)}
</For>
</VStack>
デフォルトの値を設定する
デフォルトの値を設定する場合は、defaultValueに文字列または数値を設定します。
<NumberInput defaultValue={18} placeholder="Order Quantity" />
最小・最大値を設定する
最小値と最大値を設定する場合は、minまたはmaxに数値を設定します。
<NumberInput defaultValue={18} min={8} max={31} placeholder="Order Quantity" />
ステップ値を設定する
ステップ値を設定する場合は、stepに数値を設定します。
<NumberInput
defaultValue={15}
step={5}
min={5}
max={30}
placeholder="Order Quantity"
/>
小数点を設定する
小数点を設定する場合は、precisionに数値を設定します。
<NumberInput
defaultValue={15}
precision={2}
step={0.2}
placeholder="Order Quantity"
/>
ブラー時の値のクランプを無効にする
デフォルトでは、ユーザーの自由な数値入力を受け付けますが、minまたはmaxを超える数値は、ブラー時に自動的に調整されます。この自動的に調整される動作を無効にする場合は、clampValueOnBlurをfalseに設定します。
<NumberInput
defaultValue={15}
max={30}
clampValueOnBlur={false}
placeholder="Order Quantity"
/>
範囲外の値を許可する
範囲外の値を許可する場合は、keepWithinRangeをfalseに設定します。
<NumberInput
defaultValue={15}
max={30}
keepWithinRange={false}
clampValueOnBlur={false}
placeholder="Order Quantity"
/>
無効にする
無効にする場合は、disabledをtrueに設定します。
<VStack>
<For each={["outline", "filled", "flushed"]}>
{(variant) => (
<NumberInput
key={variant}
disabled
variant={variant}
placeholder={toTitleCase(variant)}
/>
)}
</For>
</VStack>
読み取り専用にする
読み取り専用にする場合は、readOnlyをtrueに設定します。
<VStack>
<For each={["outline", "filled", "flushed"]}>
{(variant) => (
<NumberInput
key={variant}
readOnly
variant={variant}
placeholder={toTitleCase(variant)}
/>
)}
</For>
</VStack>
無効な入力にする
無効な入力にする場合は、invalidをtrueに設定します。
<VStack>
<For each={["outline", "filled", "flushed"]}>
{(variant) => (
<NumberInput
key={variant}
invalid
variant={variant}
placeholder={toTitleCase(variant)}
/>
)}
</For>
</VStack>
ボーダーの色を変更する
ボーダーの色を変更する場合は、focusBorderColorまたはerrorBorderColorに値を設定します。
<VStack>
<NumberInput
focusBorderColor="green.500"
placeholder="Custom focus border color"
/>
<NumberInput
errorBorderColor="orange.500"
invalid
placeholder="Custom invalid border color"
/>
</VStack>
プレースホルダーの色を変更する
プレースホルダーの色を変更する場合は、_placeholderに値を設定します。
<NumberInput
placeholder="Custom placeholder"
_placeholder={{ color: "blue.500" }}
/>
ステッパーをカスタマイズする
ステッパーをカスタマイズする場合は、incrementPropsまたはdecrementPropsにpropsを設定します。
<NumberInput
placeholder="Order Quantity"
incrementProps={{ children: <PlusIcon /> }}
decrementProps={{ children: <MinusIcon /> }}
/>
コンポーネントをカスタマイズする
コンポーネントをカスタマイズする場合は、useNumberInputを使用します。
const { getInputProps, getIncrementProps, getDecrementProps } = useNumberInput({
step: 0.01,
defaultValue: 3.14,
min: 3,
max: 4,
precision: 2,
})
return (
<HStack maxW="xs" gap="sm">
<IconButton
icon={<PlusIcon fontSize="2xl" />}
{...getIncrementProps()}
aria-label="Increment"
/>
<Input {...getInputProps()} aria-label="Number Input" />
<IconButton
icon={<MinusIcon fontSize="2xl" />}
{...getDecrementProps()}
aria-label="Decrement"
/>
</HStack>
)
"use client"をファイルの上部に追加する必要があります。制御する
const [value, setValue] = useState(18)
return (
<NumberInput
value={value}
onChange={(_, valueAsNumber) => setValue(valueAsNumber)}
placeholder="Order Quantity"
/>
)
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
NumberInputは、アクセシビリティに関してWAI-ARIA - Spinbutton Patternに従います。
Field.Rootを使用しない場合は、NumberInputにaria-labelまたはaria-labelledbyを設定します。
<NumberInput aria-label="Age" />
<VStack gap="sm">
<Text as="h3" id="label">
Age
</Text>
<NumberInput aria-labelledby="label" />
</VStack>
キーボード操作
| キー | 説明 | 状態 |
|---|---|---|
ArrowUp | stepの値に基づいて値を増加します。 | - |
ArrowDown | stepの値に基づいて値を減少します。 | - |
Home | minの値を設定します。 | - |
End | maxの値を設定します。 | - |
Shift + ArrowUp | stepの10倍で値を増加します。 | - |
Shift + ArrowDown | stepの10倍で値を減少します。 | - |
Meta + ArrowUp, Ctrl + ArrowUp | stepの0.1倍で値を増加します。 | - |
Meta + ArrowDown, Ctrl + ArrowDown | stepの0.1倍で値を減少します。 | - |
ARIAロールと属性
| コンポーネント | ロールと属性 | 使い方 |
|---|---|---|
NumberInput | role="spinbutton" | スピンボタンであることを示します。 |
aria-valuemin | minの値を設定します。 | |
aria-valuemax | maxの値を設定します。 | |
aria-valuenow | 現在の値を設定します。 | |
aria-valuetext | 現在の値を設定します。 | |
aria-invalid | invalidが設定されている場合、または値が範囲外の場合は"true"を設定します。 | |
aria-describedby | NumberInputがField.Root内にあり、Field.RootにerrorMessageまたはhelperMessage、もしくはField.ErrorMessageまたはField.HelperMessageが設定されている場合は、そのidを設定します。 | |
aria-disabled | disabledが設定されている場合は"true"を設定します。 | |
aria-readonly | readOnlyが設定されている場合は"true"を設定します。 | |
aria-required | requiredが設定されている場合は"true"を設定します。 | |
NumberInputIncrementButton | aria-label | "増加"を設定します。 |
NumberInputDecrementButton | aria-label | "減少"を設定します。 |
類似のコンポーネント
Textarea
Textareaは、複数行のテキスト入力を取得するために使用されるコンポーネントです。
PinInput
PinInputは、ピンコードやOTP(ワンタイムパスワード)の入力を取得するために使用されるコンポーネントです。
PasswordInput
PasswordInputは、表示・非表示の切り替えができるパスワード入力用のコンポーネントです。
Input
Inputは、ユーザーからのテキスト入力を取得するために使用されるコンポーネントです。
Editable
Editableは、インラインで編集可能なテキスト入力を取得するために使用されるコンポーネントです。
FileInput
FileInputは、ユーザーがファイルを選択するために使用されるコンポーネントです。
Autocomplete
Autocompleteは、ユーザーのテキスト入力に応じて候補を表示するために使用されるコンポーネントです。
Switch
Switchは、オンとオフの状態を切り替えるために使用されるコンポーネントです。