![Taro多端开发权威指南:小程序、H5与App高效开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/719/38209719/b_38209719.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.6 实战案例:受控与非受控Input组件
表单处理是项目中比较常见的功能,表单操作看似比较简单,其实大有学问。本节以Input组件为例,简单介绍状态管理、表单数据存储及事件处理之间的关联设计。
开始之前,我们先思考以下两种场景:
(1)Input框中的值在更改后期望被记录,然后在提交时拿出记录的值并传输给后端。
(2)操作过程中不额外存储Input框的值,而是在提交时直接获取Input框的值并传
输给后端。
场景一为什么需要记录输入框的值呢?因为有其他地方尝试修改Input框的值,还不如页面中有表单的一键清空操作;场景二是相对于场景一较为简单的表单操作,事先我们知道Input框中的值不会在其他地方引起更改,所以我们无须存储Input框中的值。场景一实现的Input组件是受控表单,场景二实现的是非受控表单。下面来看代码示例。
1.受控Input组件
![](https://epubservercos.yuewen.com/D79B16/20118172101010406/epubprivate/OEBPS/Images/40906_62_2.jpg?sign=1739383143-qJJsVhH516KKIQO96h5UyqWWNQqiGATt-0-1f0113dc200362d1db6a9096a3a0bc7c)
![](https://epubservercos.yuewen.com/D79B16/20118172101010406/epubprivate/OEBPS/Images/40906_63_1.jpg?sign=1739383143-t6PZWJIg4hAhpvlo5wXQ0cXfxjg8Q0QS-0-d2616a9d0d324ec708081ab072d34383)
上例是比较经典的受控表单处理问题,重点知识通过代码注释标注。主要思路是:当组件初始化时,设置Input框的初始值为''。在Input框中键入数据后,失去焦点,则通过事件对象获取值,并将该数据设置到状态中。当提交事件被触发时,从状态中获取Input框的值并传输给后台,完成表单提交操作。
2.非受控Input组件
![](https://epubservercos.yuewen.com/D79B16/20118172101010406/epubprivate/OEBPS/Images/40906_63_2.jpg?sign=1739383143-7ACTJgCpeWdSzLMTdYY4p2unobq7CZ0j-0-2cb49a56fd46a00bea5fc247d48ac5af)
![](https://epubservercos.yuewen.com/D79B16/20118172101010406/epubprivate/OEBPS/Images/40906_64_1.jpg?sign=1739383143-ORdisM3kpMLvrvqEcter9ydKWDadb6Gf-0-5ad2f76f887180d7c176d1288bd51cd2)
上例是比较经典的非受控表单处理问题,重点知识通过代码注释标注。主要思路是:当组件初始化时,创建用于引用Input组件实例的对象,该对象可以使用Input组件内部的方法或获取Input内部的值(Value)。当提交事件被触发时,通过inpRef获取Input组件实例中的值并传输给后台,完成表单提交操作。