FileInput
FileInputは、ユーザーがファイルを選択するために使用されるコンポーネントです。
<FileInput placeholder="Please upload file" />
使い方
import { FileInput } from "@yamada-ui/react"
import { FileInput } from "@/components/ui"
import { FileInput } from "@workspaces/ui"
<FileInput />
バリアントを変更する
<VStack>
<For each={["outline", "filled", "flushed"]}>
{(variant, index) => (
<FileInput
key={index}
variant={variant}
placeholder={toTitleCase(variant)}
/>
)}
</For>
</VStack>
サイズを変更する
<VStack>
<For each={["xs", "sm", "md", "lg", "xl"]}>
{(size, index) => (
<FileInput key={index} size={size} placeholder={toTitleCase(size)} />
)}
</For>
</VStack>
カラースキームを変更する
<VStack>
<For each={["success", "warning"]}>
{(colorScheme, index) => (
<FileInput
key={index}
colorScheme={colorScheme}
placeholder={toTitleCase(colorScheme)}
/>
)}
</For>
</VStack>
複数選択を許容する
複数選択を許容する場合は、multipleをtrueに設定します。
<FileInput placeholder="multiple" multiple />
拡張子を指定する
拡張子を指定する場合は、acceptに文字列(タイプ)を設定します。
<FileInput accept="image/png,image/jpeg" placeholder="only png, jpeg" />
区切りをカスタマイズする
区切りをカスタマイズする場合は、separatorに文字列を設定します。
<FileInput placeholder="Please upload file" multiple separator=";" />
カスタムコンポーネントを使う
カスタムコンポーネントを使う場合は、componentにReactNodeを設定します。componentは、value(File)とindexを提供します。
<FileInput
component={({ value: { name } }) => <Tag>{name}</Tag>}
gapY="xs"
multiple
placeholder="Please upload file"
/>
ファイル名を整形する
ファイル名を整形する場合は、formatを使用します。formatは、Fileを提供します。
<FileInput
format={({ name }) => name.substring(0, name.indexOf("."))}
multiple
placeholder="Please upload file"
/>
子要素をカスタマイズする
子要素をカスタマイズする場合は、childrenを使用します。childrenは、Fileを配列で提供します。
<FileInput multiple>
{(files) => <Text>Selected: {files?.length ?? 0}</Text>}
</FileInput>
アドオンを追加する
アドオンを追加する場合は、FileInputをInputGroup.Rootでラッピングし、InputGroup.Addonを使用します。
<InputGroup.Root>
<InputGroup.Addon>
<FileIcon />
</InputGroup.Addon>
<FileInput placeholder="Please upload file" />
</InputGroup.Root>
要素を追加する
要素を追加する場合は、FileInputをInputGroup.Rootでラッピングし、InputGroup.Elementを使用します。
<InputGroup.Root>
<InputGroup.Element>
<FileIcon />
</InputGroup.Element>
<FileInput placeholder="Please upload file" />
</InputGroup.Root>
無効にする
無効にする場合は、disabledをtrueに設定します。
<VStack>
<FileInput placeholder="Please upload file" disabled />
<InputGroup.Root disabled>
<InputGroup.Addon>
<FileIcon />
</InputGroup.Addon>
<FileInput placeholder="Please upload file" />
</InputGroup.Root>
<Field.Root disabled label="Upload file">
<FileInput placeholder="Please upload file" />
</Field.Root>
</VStack>
読み取り専用にする
読み取り専用にする場合は、readOnlyをtrueに設定します。
<VStack>
<FileInput placeholder="Please upload file" readOnly />
<InputGroup.Root readOnly>
<InputGroup.Addon>
<FileIcon />
</InputGroup.Addon>
<FileInput placeholder="Please upload file" />
</InputGroup.Root>
<Field.Root readOnly label="Upload file">
<FileInput placeholder="Please upload file" />
</Field.Root>
</VStack>
無効な入力にする
無効な入力にする場合は、invalidをtrueに設定します。
<VStack>
<FileInput placeholder="Please upload file" invalid />
<InputGroup.Root invalid>
<InputGroup.Addon>
<FileIcon />
</InputGroup.Addon>
<FileInput placeholder="Please upload file" />
</InputGroup.Root>
<Field.Root errorMessage="File is required." invalid label="Upload file">
<FileInput placeholder="Please upload file" />
</Field.Root>
</VStack>
ボーダーの色を変更する
ボーダーの色を変更する場合は、focusBorderColorまたはerrorBorderColorに値を設定します。
<VStack>
<FileInput
focusBorderColor="success"
placeholder="Custom focus border color"
/>
<InputGroup.Root variant="flushed" focusBorderColor="success">
<InputGroup.Element>
<FileIcon />
</InputGroup.Element>
<FileInput placeholder="Custom focus border color" />
</InputGroup.Root>
<FileInput
errorBorderColor="warning"
invalid
placeholder="Custom error border color"
/>
<InputGroup.Root errorBorderColor="warning" invalid>
<InputGroup.Addon>
<FileIcon />
</InputGroup.Addon>
<FileInput placeholder="Custom error border color" />
</InputGroup.Root>
</VStack>
リセットする
値をリセットする場合は、resetRefにrefを設定します。設定されたrefにコールバック関数が付与されるので、それを実行します。
files: 0
const [value, onChange] = useState<File[] | undefined>(undefined)
const resetRef = useRef<() => void>(null)
const onReset = () => {
onChange(undefined)
resetRef.current?.()
}
return (
<VStack>
<Text>files: {value?.length ?? 0}</Text>
<InputGroup.Root>
<FileInput
multiple
placeholder="placeholder"
resetRef={resetRef}
value={value}
onChange={onChange}
/>
{value?.length ? (
<InputGroup.Element clickable onClick={onReset}>
<Center as="button" focusVisibleRing="outside" p="0.5" rounded="xs">
<XIcon fontSize="xl" />
</Center>
</InputGroup.Element>
) : null}
</InputGroup.Root>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
現在、v2の移行に伴い、このセクションは更新中です。