Features
- Say goodbye to cumbersome
<Form.Item>
andrules
- Full TypeScript hinting support
- Easily extend existing field components
Installation
pnpm add antx
# or
yarn add antx
# or
npm i antx
Usage
import { Button, Form, Input, Select, WrapperCol } from 'antx';
const App = () => {
return (
<Form labelCol={{ span: 8 }} wrapperCol={{ span: 16 }}>
<Input label="Name" name="name" rules={['required', 'string']} />
<Select
label="Gender"
name="gender"
rules={['required', 'number']}
options={[
{ value: 1, label: 'Male' },
{ value: 2, label: 'Female' },
]}
/>
<InputNumber
label="Age"
name="age"
rules={['required', 'number', 'min=0']}
/>
<WrapperCol>
<Button type="primary" htmlType="submit">
Submit
</Button>
</WrapperCol>
</Form>
);
};
export default App;
Introduction
antx
provides a set of antd
enhanced form field components, features of enhanced components:
1. No need to write <Form.Item>
Directly mix Form.Item
props with the original field component props (full TypeScript hints), which greatly simplifies the code.
2. Simplified rules
(only enhanced, original rules
is also supported)
rules
in string phrase, for example rules={['required', 'max=10']}
represents for rules={[{ required: true }, { max: 10 }]}
.
3. Not add any new props
All props are antd
original props, without add any other new props or APIs, reducing mental burden.
In addition, antx
also provides 3 original components (Form
, Button
, Item
), 2 custom components (WrapperCol
, Watch
), and a tool function create
.
API
1. Enhanced field components
1st-level field components:
- AutoComplete
- Cascader
- Checkbox
- DatePicker
- Input
- InputNumber
- Mentions
- Radio
- Rate
- Select
- Slider
- Switch
- TimePicker
- Transfer
- TreeSelect
- Upload
2nd-level field components, in
antd
isAAA.BBB
, and inantx
can directly importBBB
:
- CheckboxGroup
Checkbox.Group
- DateRange
DatePicker.RangePicker
- TextArea
Input.TextArea
- Search
Input.Search
- Password
Input.Password
- RadioGroup
Radio.Group
- TimeRange
TimePicker.RangePicker
- Dragger
Upload.Dragger
2. Base components
Form
,Button
, andItem
areantd
original components, provided for convenience.Watch
andWrapperCol
are custom components.
- Form
- Button
- Item
Form.Item
- Watch used to monitor the changes of form fields, which can be only partial re-render, more refined and better performance
Props | Description | Type | Default |
---|---|---|---|
name |
Field to monitor | NamePath |
- |
list |
List of fields to monitor (mutually exclusive with name ) |
NamePath[] |
- |
children |
Render props. Get the monitored value (or list), return UI | (next: any, prev: any, form: FormInstance) => ReactNode |
- |
onlyValid |
Only trigger children rendering when the monitored value is not undefined |
boolean |
false |
onChange |
Get the monitored value (or list), handle side effects (mutually exclusive with children ) |
(next: any, prev: any, form: FormInstance) => void |
- |
// Watch usage example
import { Watch } from 'antx';
<Form>
<Input label="Song" name="song" />
<Input label="Artist" name="artist" />
<Watch name="song">
{(song) => {
return <div>Song: {song}</div>;
}}
</Watch>
<Watch list={['song', 'artist']}>
{([song, artist]) => {
return (
<div>
Song: {song}, Artist: {artist}
</div>
);
}}
</Watch>
</Form>;
- WrapperCol simplify the layout code, the same props as
Form.Item
, used when the UI needs to be aligned with the input box.
// WrapperCol usage example
import { WrapperCol } from 'antx';
<Form>
<Input label="Song" name="song" />
<WrapperCol>This is a hint that aligns with the input box</WrapperCol>
</Form>;
create
tool function
3. - create convert existing form field components into components that support
Form.Item
props mix-in, easily extend existing components.
import { create } from 'antx';
// Before expansion
<Form>
<Form.Item label="Song" name="song" rules={{ required: true }}>
<MyCustomInput />
</Form.Item>
</Form>;
// After expansion (TypeScript hints support)
const MyCustomInputPlus = create(MyCustomInput);
<Form>
<MyCustomInputPlus label="Song" name="song" rules={['required']} />
</Form>;
rules
4. Simplified Phrase | Correspondence | Description |
---|---|---|
'required' |
{ required: true } |
|
'required=xx' |
{ required: true, message: 'xx' } |
|
'string' |
{ type: 'string', whitespace: true } |
|
'pureString' |
{ type: 'string' } |
|
'number' |
{ type: 'number' } |
|
'array' |
{ type: 'array' } |
|
'boolean' |
{ type: 'boolean' } |
|
'url' |
{ type: 'url' } |
|
'email' |
{ type: 'email' } |
|
'len=20' |
{ len: 20 } |
len === 20 |
'max=100' |
{ max: 100 } |
max <= 100 |
'min=10' |
{ min: 10 } |
min >= 10 |
// Simplified rules usage example
<Form>
<Input label="Song" name="song" rules={['required', 'min=0', 'max=50']} />
</Form>
Comparison
Ant Plus and Ant Design form code comparison:
License
FUTAKE
Try FUTAKE in WeChat. A mini app for your inspiration moments.