use-form with all inputs
use-form with all inputs
모든 Mantine 입력 컴포넌트와 함께 use-form을 사용하는 방법을 보여주는 문서예요.
출처: 문서
본문
이 페이지는 모든 Mantine 입력과 함께 use-form을 사용하는 방법을 보여줘요. 각각은 비제어 모드(mode: 'uncontrolled')에서 form.getInputProps()를 통해 폼에 연결되고, form.onSubmit()으로 제출돼요.
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: {
field: defaultValue,
},
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<ComponentLabel {...form.getInputProps('field')} />
<Group mt="md">
<Button type="submit">Submit</Button>
</Group>
</form>
);
}
AngleSlider
import { AngleSlider, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { angle: 0 },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<AngleSlider {...form.getInputProps('angle')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Autocomplete
import { Autocomplete, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { framework: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Autocomplete label="Pick framework" data={['React', 'Angular', 'Svelte']} {...form.getInputProps('framework')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Checkbox
import { Checkbox, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { termsParams: false },
validate: {
termsParams: (value) => (value ? null : 'You must agree to sell your soul'),
},
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Checkbox label="I agree to sell my privacy" {...form.getInputProps('termsParams', { type: 'checkbox' })} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Checkbox.Group
import { Checkbox, Group, Button } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { favFrameworks: [] },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Checkbox.Group label="Select your favorite frameworks/libraries" {...form.getInputProps('favFrameworks')}>
<Checkbox value="react" label="React" />
<Checkbox value="mantine" label="Mantine" />
<Checkbox value="angular" label="Angular" />
<Checkbox value="svelte" label="Svelte" />
</Checkbox.Group>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Chip
import { Chip, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { awesome: false },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Chip {...form.getInputProps('awesome', { type: 'checkbox' })}>Mantine is awesome</Chip>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
ColorInput
import { ColorInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { color: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<ColorInput label="Your favorite color" {...form.getInputProps('color')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
ColorPicker
import { ColorPicker, Text, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { color: '#000000' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Pick color</Text>
<ColorPicker {...form.getInputProps('color')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Fieldset
import { Fieldset, TextInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { name: '', email: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Fieldset legend="Personal information">
<TextInput label="Name" {...form.getInputProps('name')} />
<TextInput label="Email" {...form.getInputProps('email')} />
</Fieldset>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
FileInput
import { FileInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { avatar: null },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<FileInput label="Avatar" placeholder="Upload avatar" {...form.getInputProps('avatar')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Input
import { Input, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { phone: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Input.Wrapper label="Phone" withAsterisk>
<Input {...form.getInputProps('phone')} />
</Input.Wrapper>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
JsonInput
import { JsonInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { packageJson: '{"name": "mantine"}' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<JsonInput label="package.json" {...form.getInputProps('packageJson')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
MaskInput
import { MaskInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { phone: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<MaskInput
label="Phone"
mask="(###) ###-####"
{...form.getInputProps('phone')}
onChange={(raw) => form.setFieldValue('phone', raw, { forceUpdate: false })}
/>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
MultiSelect
import { MultiSelect, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { frameworks: [] },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<MultiSelect label="Pick frameworks" data={['React', 'Angular', 'Svelte']} {...form.getInputProps('frameworks')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
NativeSelect
import { NativeSelect, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { framework: 'react' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<NativeSelect label="Select framework" data={['React', 'Angular', 'Svelte', 'Vue']} {...form.getInputProps('framework')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
NumberInput
import { NumberInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { age: 18 },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<NumberInput label="Your age" {...form.getInputProps('age')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
PasswordInput
import { PasswordInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { password: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<PasswordInput label="Password" {...form.getInputProps('password')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
PinInput
import { PinInput, Button, Group, Text } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { pin: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Enter PIN</Text>
<PinInput {...form.getInputProps('pin')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Radio.Group
import { Radio, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { framework: 'react' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Radio.Group label="Select your favorite framework/library" {...form.getInputProps('framework')}>
<Radio value="react" label="React" />
<Radio value="mantine" label="Mantine" />
<Radio value="angular" label="Angular" />
<Radio value="svelte" label="Svelte" />
</Radio.Group>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
RangeSlider
import { RangeSlider, Button, Group, Text } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { range: [20, 80] as [number, number] },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Price range</Text>
<RangeSlider {...form.getInputProps('range')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Rating
import { Rating, Button, Group, Text } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { rating: 0 },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Rating</Text>
<Rating {...form.getInputProps('rating')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
SegmentedControl
import { SegmentedControl, Button, Group, Text } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { framework: 'react' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Select framework</Text>
<SegmentedControl data={['React', 'Angular', 'Svelte', 'Vue']} {...form.getInputProps('framework')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Select
import { Select, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { framework: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Select label="Pick framework" data={['React', 'Angular', 'Svelte']} {...form.getInputProps('framework')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Slider
import { Slider, Button, Group, Text } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { value: 40 },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Text>Volume</Text>
<Slider {...form.getInputProps('value')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Switch
import { Switch, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { notifications: false },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Switch label="Enable notifications" {...form.getInputProps('notifications', { type: 'checkbox' })} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Switch.Group
import { Switch, Group, Button } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { favFrameworks: [] },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Switch.Group label="Select your favorite frameworks/libraries" {...form.getInputProps('favFrameworks')}>
<Switch value="react" label="React" />
<Switch value="mantine" label="Mantine" />
<Switch value="angular" label="Angular" />
<Switch value="svelte" label="Svelte" />
</Switch.Group>
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
TagsInput
import { TagsInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { frameworks: [] },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<TagsInput label="Press Enter to submit a tag" data={['React', 'Angular', 'Svelte']} {...form.getInputProps('frameworks')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
Textarea
import { Textarea, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { message: '' },
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<Textarea label="Your message" {...form.getInputProps('message')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}
TextInput
import { TextInput, Button, Group } from '@mantine/core';
import { useForm } from '@mantine/form';
function Demo() {
const form = useForm({
mode: 'uncontrolled',
initialValues: { email: '' },
validate: {
email: (value) => (/^\S+@\S+$/.test(value) ? null : 'Invalid email'),
},
});
return (
<form onSubmit={form.onSubmit((values) => console.log(values))}>
<TextInput label="Email" placeholder="Your email" withAsterisk {...form.getInputProps('email')} />
<Group mt="md"><Button type="submit">Submit</Button></Group>
</form>
);
}