关于
useField
和useFields
适合于简单的表单场景,但是对于复杂的表单场景,我们需要更多的功能,比如表单校验,表单提交等。
则可以选用useFrom
,其提供了更加完整的创建可绑定表单的完整解决方案,可以让更方便将AutoStore
的状态和表单控件进行双向绑定,使得收集数据变得更简单。
useForm
的基本原理如下:
1. 创建Form
组件
useForm
返回一个Form
组件,该组件是对标准form
的封装。
2. 初始化表单
useForm
内部的useEffect
会自动初始化表单.
然后在初始化时,调用querySelectorAll
获取到所有表单内部的input
,textarea
,select
元素
,依次遍历这些元素,根据name
属性,从state
中获取对应的值,并设置绑定到表单元素上,完成表单字段的初始化。
3. 订阅变更事件
要实现双向绑定,我们需要:
- 监听表单元素的
change
事件
由于表单事件onchange
会冒泡,所以我们只需要在form
元素上监听change
事件即可。
所以通过form.addEventListener('input',onChange)
就可以在表单元素变化时触发捕获到onChange
事件。
然后在onChange
事件中,我们可以通过event.target
获取到表单元素.
最后将表单元素的值更新到state[event.target.name]
。
- 监听
state
的变化
使用store.watch
监听state
的变化,当state
变化时,将数据更新到name=<path>
的表单元素上即可。