Skip to content

Commit 97ebc23

Browse files
committed
update
1 parent 90526db commit 97ebc23

File tree

19 files changed

+627
-232
lines changed

19 files changed

+627
-232
lines changed

docs/.vitepress/config.mts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,22 +89,11 @@ export default defineConfig({
8989
]
9090
},
9191
{
92-
text: '表单',
92+
text: '表单绑定',
9393
collapsed: true,
9494
items: [
95-
{ text: '关于', link: '/guide/form/about' },
96-
{ text:"快速入门",link:"/guide/form/get-started"},
97-
{ text:"字段",
98-
collapsed:false,
99-
items:[
100-
{ text: '关于', link: '/guide/form/field/about' },
101-
{ text: 'bind', link: '/guide/form/field/bind' },
102-
{ text: 'useField', link: '/guide/form/field/use-field' },
103-
{ text: 'useFields', link: '/guide/form/field/use-fields' },
104-
{ text:"字段拆分",link:"/guide/form/field/split-field"},
105-
{ text:"字段组件",link:"/guide/form/field/field"},
106-
]
107-
},
95+
{ text: '关于', link: '/guide/form/form/about' },
96+
{ text:"快速入门",link:"/guide/form/get-started"},
10897
{
10998
text: '表单',
11099
collapsed: true,
@@ -115,6 +104,17 @@ export default defineConfig({
115104
{ text:"提交表单",link:"/guide/form/form/submit"},
116105
]
117106
},
107+
{ text:"字段",
108+
collapsed:false,
109+
items:[
110+
{ text: '关于', link: '/guide/form/field/about' },
111+
{ text: 'useField', link: '/guide/form/field/use-field' },
112+
{ text: 'useFields', link: '/guide/form/field/use-fields' },
113+
{ text:"字段拆分",link:"/guide/form/field/split-field"},
114+
{ text:"字段组件",link:"/guide/form/field/component"},
115+
{ text:"渲染字段",link:"/guide/form/field/render-field"},
116+
]
117+
},
118118
{
119119
text:"校验",
120120
collapsed:false,

docs/demos/form/field/bindField.tsx

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import React from 'react';
2+
import { useStore } from '@autostorejs/react';
3+
import { Layout,JsonView,Button,Input, Select, Radio } from "x-react-components"
4+
5+
export default ()=>{
6+
7+
const { reset,useFields,useReactive } = useStore({
8+
user:{
9+
firstName:"Zhang",
10+
lastName:"Fisher",
11+
job:2,
12+
age:18,
13+
pets:"Dog",
14+
vip:false
15+
}
16+
})
17+
18+
const fields = useFields({
19+
"user.pets":{
20+
type:"radio",
21+
values:["Dog","Cat","Fish"]
22+
},
23+
"user.ss":{}
24+
})
25+
const [ state ]= useReactive()
26+
27+
return <Layout>
28+
<div>
29+
<Input label="First Name" {...fields.user.firstName}/>
30+
<Input label="last Name" {...fields.user.lastName} />
31+
<Input label="Age" {...fields.user.age}/>
32+
<Select {...fields.user.job} label ="Job" style={{color:'#333'}}
33+
items={[
34+
{value:1,title:"Engineer"},
35+
{value:2,title:"Doctor"},
36+
{value:3,title:"Teacher"}
37+
]}
38+
/>
39+
<Input type="checkbox" label="VIP" {...fields.user.vip} />
40+
<Radio inline label="Dog" {...fields.user.pets[0]}/>
41+
<Radio label="Cat" {...fields.user.pets[1]}/>
42+
<Radio label="Fish" {...fields.user.pets[2]}/>
43+
<Button onClick={()=>{
44+
reset()
45+
}}>Reset</Button>
46+
</div>
47+
<div>
48+
<JsonView data={state}/>
49+
</div>
50+
</Layout>
51+
}

docs/demos/form/form/multiForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react"
22
import { createStore, useForm } from "@autostorejs/react";
3-
import { Button, Box, Input, JsonView, Layout, Spin, Field, ColorBlock } from "x-react-components";
3+
import { Button, Box, Input, JsonView, Layout, ColorBlock } from "x-react-components";
44

55

66
const sumOrder = (order)=>order.price * order.count

docs/guide/form/field/about.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
11
# 关于
22

3+
`AutoStore`表单功能支持两种类型的表单字段:
4+
5+
## 受控字段
6+
7+
使用`useField``useFields`创建的字段是受控字段,其值由`useForm`创建的管理。
8+
9+
10+
## 非受控字段
11+
12+
13+
`Field`组件

docs/guide/form/field/bind.md

Lines changed: 0 additions & 32 deletions
This file was deleted.
File renamed without changes.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# 渲染字段
2+
3+
字段渲染有`3`种方式:
4+
5+
## 简单字段
6+
7+
只需要为`input``textarea``select`元素设置`name`属性,且`name`为一个`字符串路径`指向状态即可。
8+
9+
```tsx
10+
<input name="user.firstName" />
11+
```
12+
13+
## 封装字段
14+
15+
当然,实际中的输入字段我们一般会进行封装,以便可以进行更多的控制。
16+
17+
我们也可以在封装元素上通过`data-field-name='<状态路径>'`标识这是一个表单字段。
18+
19+
```tsx {1,3}
20+
<div data-field-name="user.name" >
21+
<label>First Name</label>
22+
<input/>
23+
<span className="invalid"></span>
24+
</div>
25+
```
26+
27+
- 使用`data-field-name`标识表单字段可以让表单能进行更多的控制。
28+
- `useForm`在初始化时会自动查找内部所有的`input``textarea``select`元素进行自动绑定处理,包括侦听事件等。
29+
30+
31+
## Field字段组件
32+
33+
`Field`组件是`useForm`提供的一个用于封装表单字段的高级组件,可以用于更加灵活的表单字段封装。
34+
35+
使用`Field`字段组件可以实现更复杂的控制,如校验、字段联动等等
36+
37+
```tsx {1,3}
38+
const { Form,Field } = useForm({...})
39+
40+
<Field
41+
name="user.name"
42+
validate={(value)=>value.length>=3}
43+
render={({value,validate,onChange,name,error})=>{
44+
return <>
45+
<label>First Name</label>
46+
<input name={name} value={value} onChange={onChange}/>
47+
<span className="invalid"></span>
48+
</>
49+
}}
50+
>
51+
</Field>
52+
```

docs/guide/form/field/use-field.md

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,47 @@
22

33
## 关于
44

5-
`bind`绑定控件的功能比较简单,`useField`进行双向绑定更加简单
5+
`useField`用来创建一个表单控件绑定对象,用来建立状态数据与`input`控件之间的双向绑定
66

77
**`useField`签名如下:**
88

99
```ts
10-
type UseFieldBindings<Value> = Value extends Dict ? Record<keyof Value,{
11-
value:any
12-
onChange:(e:any)=>void
13-
}> : Value
1410

15-
type UseFieldOptions={}
16-
17-
type UseFieldGetter<Value,State extends Dict>= (state:ComputedState<State>)=>Value
18-
type UseFieldSetter<Value,State extends Dict>= (input:Value,state:ComputedState<State>)=>void
19-
20-
interface UseFieldType<State extends Dict> {
11+
export interface UseFieldType<State extends Dict> {
2112
(): UseFieldBindings<ComputedState<State>>
22-
<Value>(selector: string,options?:UseFieldOptions): UseFieldBindings<Value>
13+
<Value>(
14+
selector: ObjectKeyPaths<ComputedState<State>>,
15+
options?:UseFieldOptions<Value>
16+
): UseFieldBindings<Value>
2317
<Value>(
2418
getter: UseFieldGetter<Value,State>,
2519
setter:UseFieldSetter<Value,State>,
26-
options?:UseFieldOptions
20+
options?:UseFieldOptions<Value>
2721
):UseFieldBindings<Value>
22+
<Value>(
23+
getters: (ObjectKeyPaths<ComputedState<State>> | string[] | UseFieldGetter<Value,State>)[],
24+
setter:UseFieldSetter<Value,State>,
25+
options?:UseFieldOptions<Value>
26+
):UseFieldBindings<Value>[]
2827
}
2928
```
3029

30+
`useField`支持如下的调用签名:
31+
32+
- **useField(selector,options?)**
33+
34+
通过`selector`指定一个状态路径,创建一个双向字段绑定对象。
35+
36+
- **useField(getter,setter,options?)**
37+
38+
通过`getter``setter`方法,创建一个动态字段绑定对象。
39+
当要实现将多个状态值合并后绑定到一个`input`时使用。
40+
41+
- **useField(getters,setter,options?)**
42+
43+
当要实现将多个状态值绑定到多个`input`上或者进行单个状态数据的拆分时使用。
44+
45+
3146
## 基本用法
3247

3348
可以直接通过`useField(<状态路径>)`来创建一个双向字段绑定对象,然后解构到`input`控件即可。
@@ -78,4 +93,24 @@ useField<Value>(
7893

7994
<demo react="form/field/useFieldToState.tsx"
8095
title="将输入字符全部转换为大写"
81-
/>
96+
/>
97+
98+
99+
## 配置字段
100+
101+
`useField`支持如下的配置选项:
102+
103+
```ts
104+
type UseFieldOptions<Value=any>={
105+
name? : string // 可选的字段名称
106+
type? : 'radio' | 'checkbox' | 'select' | 'textarea' | 'input'
107+
// 仅当type = radio或checkbox时有效时有效
108+
values? : any[]
109+
toState? : (value:string,options?:{path:string[] | undefined,part:number})=>Value // 将数据更新到状态中时调用进行转换
110+
}
111+
```
112+
113+
- `name`: 可选的字段名称,用于标识字段。
114+
- `type`: 控件类型,支持`radio``checkbox``select``textarea``input`
115+
- `values`: 仅当`type = radio``checkbox`时有效时有效,用于指定`radio``checkbox`的值。
116+
- `toState`: 用于将`input`值转换为状态值的函数。

docs/guide/form/field/use-fields.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@
1212
- `UseFields`创建的绑定对象,会自动同步状态中的值到表单控件上。
1313

1414

15+
## 配置字段
16+
17+

0 commit comments

Comments
 (0)