博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React:form
阅读量:7223 次
发布时间:2019-06-29

本文共 1840 字,大约阅读时间需要 6 分钟。

表单控件:

input

  文档在介绍控件之前,先提到了react组件自身的一个特点:状态由state掌控,改变组件状态只能用setState方法。

而在html的表单里,input、radio、checkbox、select的值都是随用户输入改变的。

要创建一个React的表单控件,也就是用React的方式创建表单组件:

在input控件中,value值就是一个状态state.value。当用户输入完成后,通过onChange事件调用setState改变state.value的值,从而让state.value与用户输入一致。此时,input不再是一个单纯的表单元素,而是一个React组件,可以有各种用户自定义行为。这和vue的v-model倒是很一致。一个组件就是一个实例,状态变量属于实例的(私有)属性,并能单向/双向绑定。

textarea:

在html中,textarea的初始值由其文本元素定义。

在React中,用其value特性来表示。具体操作和input一样:

select:

1 

在html中,select创建下拉菜单,在option中庸selected特性预选一个option。

在React中,不适用selected特性,而是直接用value预定义某个选项的值。这使得对select的操作专注在value特性。

1   //... 2   constructor(props) { 3     super(props); 4     this.state = {value: 'coconut'}; 5  6     this.handleChange = this.handleChange.bind(this); 7     this.handleSubmit = this.handleSubmit.bind(this); 8   } 9 //...10   

因此,对于input、textarea和select,我们只需要操作value即可。

处理Multiple Inputs:

文档给了一个针对多个表单控件的例程,我们可以通过判断控件的的name和type特性来处理:

1   handleInputChange(event) {2     const target = event.target;3     const value = target.type === 'checkbox' ? target.checked : target.value;4     const name = target.name;5 6     this.setState({7       [name]: value8     });9   }

此时,表单的状态就是表单的名值对,经过URI编码后可以post给后台。

 

另一种替代方案:

  文档提到,如果我们嫌表单控件麻烦,可以用另一种形式的表单组件--Uncontrolled Components:

意思是我们不必特意给form中的表单元素写处理程序,也不需要创建state变量。我们只需要写一个针对整个表单的处理程序,在用户submit的时候调用即可。其中,表单元素的value的输入用一个ref函数捕获:

1   render() { 2     return ( 3       
4
8
9
10 );

另外,Uncontrolled Components形式的表单中,为了给表单元素设置初始值,有一个defaultValue特性,在表单渲染的时候显示初始值。

1         
this.input = input} />

 

 

 

转载于:https://www.cnblogs.com/alan2kat/p/7467280.html

你可能感兴趣的文章
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
FreeWheel业务系统微服务化过程经验分享
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Atlassian是怎样进行持续交付的?且听 Steve Smith一一道来
查看>>
Web Storage相关
查看>>
[PHP内核探索]PHP中的哈希表
查看>>
Apache-drill Architechture
查看>>
WordPress 5.2 Beta 3 发布,要求 PHP 5.6.20 以上版本
查看>>
通通连起来——无处不在的流
查看>>
互联网+时代,看云计算如何改变传统行业
查看>>
ZFS ARC & L2ARC zfs-$ver/module/zfs/arc.c
查看>>
c++类默认拷贝构造函数---浅复制
查看>>
2019年最火热的Golang项目
查看>>
可实现RSSD云硬盘120万IOPS的SPDK IO路径优化实践
查看>>
Vue项目部署遇到的坑(你肯定会遇到!)
查看>>
资源分享计划第三期 0511
查看>>
awk 文本处理
查看>>
【JSConf EU 2018】主题总结 (部分主题已有中文文章)
查看>>