NumberInput
NumberInput
は、ユーザーからの数値入力を取得するために使用されるコンポーネントです。
インポート
import { NumberInput } from "@yamada-ui/react"
使い方
編集可能な例
<NumberInput placeholder="basic" />
バリアントを変更する
編集可能な例
<VStack> <NumberInput variant="outline" placeholder="outline" /> <NumberInput variant="filled" placeholder="filled" /> <NumberInput variant="flushed" placeholder="flushed" /> <NumberInput variant="unstyled" placeholder="unstyled" /> </VStack>
サイズを変更する
編集可能な例
<VStack> <NumberInput placeholder="extra small size" size="xs" /> <NumberInput placeholder="small size" size="sm" /> <NumberInput placeholder="medium size" size="md" /> <NumberInput placeholder="large size" size="lg" /> </VStack>
ボーダーのカラーを変更する
ボーダーのカラーを変更する場合は、focusBorderColor
またはerrorBorderColor
にカラーを設定します。
編集可能な例
<VStack> <NumberInput focusBorderColor="green.500" placeholder="custom border color" /> <NumberInput isInvalid errorBorderColor="orange.500" placeholder="custom border color" /> </VStack>
プレースホルダーのカラーを変更する
プレースホルダーのカラーを変更する場合は、_placeholder
にprops
を設定します。
編集可能な例
<VStack> <NumberInput placeholder="custom placeholder" _placeholder={{ opacity: 1, color: "gray.500" }} /> <NumberInput color="green.500" placeholder="custom placeholder" _placeholder={{ color: "inherit" }} /> </VStack>
デフォルトの値を設定する
デフォルトの値を設定する場合は、defaultValue
に文字列または数値を設定します。
編集可能な例
<NumberInput defaultValue={18} />
最小値と最大値を設定する
最小値と最大値を設定する場合は、min
またはmax
に数値を設定します。
編集可能な例
<NumberInput defaultValue={18} min={8} max={31} />
ステップ値を設定する
ステップ値を設定する場合は、step
に数値を設定します。
編集可能な例
<NumberInput defaultValue={15} step={5} min={5} max={30} />
小数点を設定する
小数点を設定する場合は、precision
に数値を設定します。
編集可能な例
<NumberInput defaultValue={15} precision={2} step={0.2} />
ブラー時の値のクランプを無効にする
デフォルトでは、ユーザーの自由な数値入力を受け付けますが、min
またはmax
を超える数値は、ブラー時に自動的に調整されます。この自動的に調整される動作を無効にする場合は、clampValueOnBlur
をfalse
に設定します。
編集可能な例
<NumberInput defaultValue={15} max={30} clampValueOnBlur={false} />
範囲外の値を許可する
シナリオによっては、範囲外の値をブロックしたくない場合があります。その場合は、keepWithinRange
をfalse
に設定します。
編集可能な例
<NumberInput defaultValue={15} max={30} keepWithinRange={false} clampValueOnBlur={false} />
無効化する
無効化する場合は、isDisabled
をtrue
に設定します。
編集可能な例
<VStack> <NumberInput isDisabled variant="outline" placeholder="outline" /> <NumberInput isDisabled variant="filled" placeholder="filled" /> <NumberInput isDisabled variant="flushed" placeholder="flushed" /> <NumberInput isDisabled variant="unstyled" placeholder="unstyled" /> <FormControl isDisabled label="Order quantity" helperMessage="Please enter the quantity you wish to order." > <NumberInput /> </FormControl> </VStack>
読み取り専用にする
読み取り専用にする場合は、isReadOnly
をtrue
に設定します。
編集可能な例
<VStack> <NumberInput isReadOnly variant="outline" placeholder="outline" /> <NumberInput isReadOnly variant="filled" placeholder="filled" /> <NumberInput isReadOnly variant="flushed" placeholder="flushed" /> <NumberInput isReadOnly variant="unstyled" placeholder="unstyled" /> <FormControl isReadOnly label="Order quantity" helperMessage="Please enter the quantity you wish to order." > <NumberInput /> </FormControl> </VStack>
無効な入力にする
無効な入力にする場合は、isInvalid
をtrue
に設定します。
編集可能な例
<VStack> <NumberInput isInvalid variant="outline" placeholder="outline" /> <NumberInput isInvalid variant="filled" placeholder="filled" /> <NumberInput isInvalid variant="flushed" placeholder="flushed" /> <NumberInput isInvalid variant="unstyled" placeholder="unstyled" /> <FormControl isInvalid label="Order quantity" errorMessage="Order quantity is required." > <NumberInput /> </FormControl> </VStack>
ステッパーをカスタマイズする
ステッパーをカスタマイズする場合は、incrementProps
またはdecrementProps
にprops
を設定します。
編集可能な例
<NumberInput incrementProps={{ px: "xs", children: "+" }} decrementProps={{ px: "xs", children: "-" }} />
カスタムコンポーネントを使用する
カスタムコンポーネントを使用する場合は、useNumberInput
を使用します。
編集可能な例
const { getInputProps, getIncrementProps, getDecrementProps } = useNumberInput({ step: 0.01, defaultValue: 3.14, min: 3, max: 4, precision: 2, }) return ( <HStack maxW="xs" gap="sm"> <Button {...getIncrementProps()}>+</Button> <Input {...getInputProps()} /> <Button {...getDecrementProps()}>-</Button> </HStack> )
React Hook Form
を使う
編集可能な例
type Data = { numberInput: string } const { control, handleSubmit, watch, formState: { errors }, } = useForm<Data>() const onSubmit: SubmitHandler<Data> = (data) => console.log("submit:", data) console.log("watch:", watch()) return ( <VStack as="form" onSubmit={handleSubmit(onSubmit)}> <FormControl isInvalid={!!errors.numberInput} label="Age" errorMessage={errors.numberInput ? errors.numberInput.message : undefined} > <Controller name="numberInput" control={control} rules={{ required: { value: true, message: "This is required." }, max: { value: 5, message: "The maximum value is 5." }, }} render={({ field }) => <NumberInput {...field} />} /> </FormControl> <Button type="submit" alignSelf="flex-end"> Submit </Button> </VStack> )
GitHubでこのページを編集する