Skip to content

关于

useFielduseFields适合于简单的表单场景,但是对于复杂的表单场景,我们需要更多的功能,比如表单校验,表单提交等。

则可以选用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>的表单元素上即可。