React——from
在React中HTML的from元素与其他的DOM元素有些不同。因为表单元素自然而然的会有一些内部状态
一.controlled components
在HTML中,像input,select,textarea这些表单元素都会维持自己的状态,并且会基于用户输入更新状态。在React中,易变的状态通常保存在组件的state属性中,并且 使用setState()方法去更新。如果一个表单元素的值被React控制,那么这个组件就称为'controlled components' 在controlled component中,每一个state都有一个关联的handler方法,通过它可以直接的修改或者验证用户输入
class NameFrom extend React.Component{
constructor(props){
super(props);
this.state = {name:''}
}
handleSubmit(event){
console.log(this.state.name);
event.preventDefault();
}
handleChange(event){
console.log(this.state.name);
this.setState({
name:event.target.value
});
}
render(){
return (
<from onSubmit={this.handleSubmit.bind(this)}>
<input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/><br>
<input type='submit' value='submit'>
</from>
)
}
};
二.textarea 标签
在HTML中,textarea的文本信息定义在它的子元素中
<textarea>there are text</textarea>
在React中,textarea的文本信息用value属性定义.所以在表单中,textarea的写法与单行文本非常相似
三.select 标签
在React中在select元素上设置value属性,表示被选中的选项
四.处理多个input
当你需要处理多个controlled的input元素,你可以在每一个input元素上设置一个name属性,并且在handler函数中根据event.target.name的值去做不同的操作
class MyFrom extend React.Component{
constructor(props){
super(props);
this.state = {
name:'',
age:''
};
}
handleChange(event){
let name = event.target.name;
this.setState({
[name]:event.target.value
});
console.log(this.state);
}
render(){
return (
<from>
<input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/>
<input type='text' name='age' value={this.state.age} onChange={this.handleChange.bind(this)}/>
</from>
)
}
}
五.Uncontrolled Components
推荐在大多数时候都使用controlled Component实现表单,在controlled Component中,表单数据被react组件控制,在uncontrolled component中,数据被
DOM自己控制。在uncontrolled component中不需要为每一个要更新的state写一个handler函数,而是通过ref从DOM中得到表单数据
class Uncontrolled extend React.Component{
constructor(props){
super(props);
}
handleSubmit(event){
console.log(this.input.value);
event.preventDefault();
}
refFunc(input){
this.input = input;
}
render(){
return (
<from onSubmit={this.handleSubmit.bind(this)}>
<input type='text' name='name' ref={this.refFunc.bind(this)}/>
<input type='submit' value='提交'/>
</from>
)
}
}
如果在一个Uncontrolled Components上设置value属性会让该组件的成为一个只读组件,如果想给Uncontrolled <input type='text'>
设置初始值可以使用defaultValue属性
<input type="checkbox"> 和 <input type="radio"> 使用 defaultChecked, <select> and <textarea> 使用 defaultValue.
React——from的更多相关文章
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- 十分钟介绍mobx与react
原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...
- RxJS + Redux + React = Amazing!(译一)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...
- React 入门教程
React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- 2017-1-5 天气雨 React 学习笔记
官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...
- RxJS + Redux + React = Amazing!(译二)
今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...
- React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
- React的使用与JSX的转换
前置技能:Chrome浏览器 一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...
- Vue.js 2.0 和 React、Augular等其他框架的全方位对比
引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...
随机推荐
- Xamarin.Forms(二) 返回页面的数据刷新
这几天在做一个课程表的小程序,遇到了这样一个问题: app打开便是课程表的页面,如果课程表页面没有数据的话需要跳转到同步课表页面模拟登陆教务管理系统获取课表,并显示在课程表页面,这样就需要从同步课表页 ...
- Head First 设计模式 第5章 单例模式
第5章 单例模式 1.定义:确保一个类只有一个实例,并为其创建访问点. 2.单例模式的类图: 对应的单例模式的代码: package com.ek.singleton; /** * @包名 com.e ...
- 关于个人编辑器sublime text3使用指南
用过了好多编辑器,前些年用的zend studio,phpstorm近两年转为nodepad++(因为写的语言种类比较多了,shell,python,php,前端等),相对于nodepad++, s ...
- viewpager+layout布局文件随数据多少创建滑动页面
近期在做一个答题类型的APP,而其中最重要的是答题卡.而答题卡要如何做? 1.将数据插入到SQLite数据库中 2.建立entity实体包,创建实体类,封装. 3.创建实体与view的List集合 4 ...
- Unity快速接入SDK框架
先把工程源码贴出来: 链接:http://pan.baidu.com/s/1geDhtS3 密码:i0s9 最近接android ios的SDK 已经接了10多个 有点心得 分享一下 如果有更好想法求 ...
- pwnable.kr memcpy之write up
// compiled with : gcc -o memcpy memcpy.c -m32 -lm #include <stdio.h> #include <string.h> ...
- VIM的字符编码设置
vim 编码方式的设置和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux ...
- CSS规范--春风十里不如写好CSS
先吟几句: 最近看了看春风十里不如你,本来很少看剧的,暑假有点闲就看了,感觉不错,挺喜欢这部剧,就套了个名字,嘿嘿嘿.剧里面印象深刻的是<致橡树>这首诗,念几句: 我如果爱你,绝不像攀援的 ...
- trycatch放在for循环的里面还是外面好
try放在for循环里面和外面的区别是什么呢?先看看下面的代码的区别:public class Test { public void test1(){ for (int count ...
- 【leetcode】349. Intersection of Two Arrays
Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1 ...