FileButton
FileButton
は、ユーザーがファイルを選択するために使用されるボタンのコンポーネントです。
インポート
import { FileButton } from "@yamada-ui/react"
使い方
FileButton
は、内部的にButtonを使用しています。
編集可能な例
<VStack alignItems="flex-start"> <FileButton>Upload</FileButton> <FileButton as={IconButton} icon={<Plus />} /> </VStack>
または、children
を使用してカスタマイズすることも可能です。children
は、onClick
, isDisabled
, isReadOnly
, isInvalid
を提供します。
編集可能な例
<FileButton> {({ onClick }) => <Link onClick={onClick}>Upload</Link>} </FileButton>
バリアントを変更する
編集可能な例
<Wrap gap="md"> <FileButton colorScheme="primary" variant="solid"> Solid </FileButton> <FileButton colorScheme="secondary" variant="outline"> Outline </FileButton> <FileButton colorScheme="warning" variant="ghost"> Ghost </FileButton> <FileButton colorScheme="danger" variant="link"> Link </FileButton> <FileButton variant="unstyled">Unstyle</FileButton> </Wrap>
サイズを変更する
編集可能な例
<Wrap gap="md"> <FileButton colorScheme="primary" size="xs"> X Small </FileButton> <FileButton colorScheme="secondary" size="sm"> Small </FileButton> <FileButton colorScheme="warning" size="md"> Medium </FileButton> <FileButton colorScheme="danger" size="lg"> Large </FileButton> </Wrap>
カラースキームを変更する
編集可能な例
<Wrap gap="md"> <FileButton colorScheme="secondary">Secondary</FileButton> <FileButton colorScheme="green">Green</FileButton> </Wrap>
複数選択を許容する
複数選択を許容する場合は、multiple
をtrue
に設定します。
編集可能な例
<FileButton multiple>Upload</FileButton>
拡張子を指定する
拡張子を指定する場合は、accept
に文字列(タイプ, タイプ
)を設定します。
編集可能な例
<FileButton accept="image/png,image/jpeg">Upload</FileButton>
ボーダーのカラーを変更する
ボーダーのカラーを変更する場合は、errorBorderColor
にカラーを設定します。
編集可能な例
<FileButton isInvalid errorBorderColor="orange.500"> Upload </FileButton>
無効化する
無効化する場合は、isDisabled
をtrue
に設定します。
編集可能な例
<VStack alignItems="flex-start"> <FileButton isDisabled>Upload</FileButton> <FileButton as={IconButton} icon={<Plus />} isDisabled /> <FileButton isDisabled> {({ onClick, isDisabled }) => ( <Link onClick={onClick} opacity={isDisabled ? 0.4 : 1} cursor={isDisabled ? "not-allowed" : "pointer"} _hover={isDisabled ? undefined : { textDecoration: "underline" }} > Upload </Link> )} </FileButton> <FormControl isDisabled label="Upload file" helperMessage="Please select a file to upload." > <FileButton>Upload</FileButton> </FormControl> </VStack>
読み取り専用にする
読み取り専用にする場合は、isReadOnly
をtrue
に設定します。
編集可能な例
<VStack alignItems="flex-start"> <FileButton isReadOnly>Upload</FileButton> <FileButton as={IconButton} icon={<Plus />} isReadOnly /> <FileButton isReadOnly> {({ onClick, isReadOnly }) => ( <Link onClick={onClick} cursor={isReadOnly ? "default" : "pointer"} _hover={isReadOnly ? undefined : { textDecoration: "underline" }} > Upload </Link> )} </FileButton> <FormControl isReadOnly label="Upload file" helperMessage="Please select a file to upload." > <FileButton>Upload</FileButton> </FormControl> </VStack>
無効な入力にする
無効な入力にする場合は、isInvalid
をtrue
に設定します。
編集可能な例
<VStack alignItems="flex-start"> <FileButton isInvalid>Upload</FileButton> <FileButton as={IconButton} icon={<Plus />} isInvalid /> <FormControl isInvalid label="Upload file" errorMessage="File is required."> <FileButton>Upload</FileButton> </FormControl> </VStack>
リセットする
値をリセットする場合は、resetRef
にref
を設定します。設定されたref
にコールバック関数が付与されるので、それを実行します。
編集可能な例
const [files, onChange] = useState<File[] | null>(null) const resetRef = useRef<() => void>(null) const onReset = () => { onChange(null) if (resetRef.current) resetRef.current() } return ( <VStack> <Text>files: {files ? files.length : 0}</Text> <HStack> <FileButton resetRef={resetRef} onChange={onChange}> Upload </FileButton> <Button onClick={onReset}>Reset</Button> </HStack> </VStack> )
React Hook Form
を使う
編集可能な例
type Data = { fileButton: File[] | null } const resetRef = useRef<() => void>(null) const { control, handleSubmit, watch, setValue, formState: { errors }, } = useForm<Data>() const onReset = () => { setValue("fileButton", null) if (resetRef.current) resetRef.current() } const onSubmit: SubmitHandler<Data> = (data) => console.log("submit:", data) console.log("watch:", watch()) return ( <VStack as="form" onSubmit={handleSubmit(onSubmit)}> <FormControl isInvalid={!!errors.fileButton} label="Files" errorMessage={errors.fileButton ? errors.fileButton.message : undefined} > <Controller name="fileButton" control={control} rules={{ required: { value: true, message: "This is required." } }} render={({ field: { ref, name, onChange, onBlur } }) => ( <HStack> <FileButton {...{ ref, name, onChange, onBlur }} resetRef={resetRef} > Upload </FileButton> <Button onClick={onReset}>Reset</Button> </HStack> )} /> </FormControl> <Button type="submit" alignSelf="flex-end"> Submit </Button> </VStack> )
GitHubでこのページを編集する