import {Layout} from '../../src/Layout'; export default Layout;
import docs from 'docs:react-aria-components'; import '../../tailwind/tailwind.css'; import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['upload', 'input'];
{docs.exports.FileTrigger.description}
"use client";
import {FileTrigger} from 'react-aria-components';
import {Button} from 'vanilla-starter/Button';
import {useState} from 'react';
function Example(props) {
let [files, setFiles] = useState([]);
return (
<>
{/*- begin focus -*/}
<FileTrigger
{...props}
/* PROPS */
onSelect={(e) => {
let files = e ? Array.from(e) : [];
let filenames = files.map((file) => file.name);
setFiles(filenames);
}}>
<Button>Select a file</Button>
</FileTrigger>
{/*- end focus -*/}
{files.join(', ')}
</>
);
}FileTrigger works with any pressable React Aria component (e.g. Button, Link, etc.). Use the <Pressable> component or usePress hook to wrap a custom trigger element such as a third party component or DOM element.
"use client"
import {Pressable, FileTrigger} from 'react-aria-components';
<FileTrigger>
{/*- begin highlight -*/}
<Pressable>
<span role="button">Custom trigger</span>
</Pressable>
{/*- end highlight -*/}
</FileTrigger>const CustomTrigger = React.forwardRef((props, ref) => (
<button {...props} ref={ref} />
));<FileTrigger>
<Button />
</FileTrigger>