①uncontrolComponent & controlComponent

          If your form is incredibly simple in terms of UI feedback, uncontrolled with refs is entirely fine. You don’t have to listen to what the various articles are saying is “bad.”

feature uncontrolled controlled
one-time value retrieval (e.g. on submit)
validating on submit
instant field validation
conditionally disabling submit button
enforcing input format
several inputs for one piece of data
dynamic inputs

    uncontrolComponent

      当不需要验证,或者提交的时候再验证等简单的功能的时候,input应该使用更为简单的  uncontrolComponent 用法的关键点为: ref获取该DOM的值

      <input ref=(ref)=>{this.input = ref} />
      //然后在需用用值的地通过this.input.value获取该值即可

    或者在onchange里实时检验,即使用户输入错误也让他输入,但是我们会实时给出错误的提示

        onChange={(e) => {
let v = e.target.value;
if (v) {
if (/^[0-9]{1,30}$/.test(v)) {
//成功
this.showError();
} else {
this.showError("请输入正确的卡号");
}
} else {
this.showError("请输入卡号");
}
this.setState({
inputValue: v
});
}}

    controlComponent

      需要立即验证,更改输入格式等则使用  controlComponent

-----------------------------------2017.12.25新增:----------------------------

知识点一:按照功能 将此功能下的所有数据请求和管理,都存放在唯一一个根组件(容器组件)中;

      就像: OBT中的Pay.js,所有ajax都在这里,每当数据请求了,就改变自生的state,触发re-render,然后重新传递给子组件新的props;

      Pay.js就是“容器组件”,而其子组件,如:Panel,就是“展示组件”(不需要自己的state,数据都从父的“容器组件”中获取);

知识点二:使用 PropTypes 和 getDefaultProps();

  1. 一定要写PropTypes,切莫为了省事而不写

  2. 如果一个Props不是requied,一定在getDefaultProps中设置它

    React.PropTypes主要用来验证组件接收到的props是否为正确的数据类型,如果不正确,console中就会出现对应的warning。出于性能方面的考虑,这个API只在开发环境下使用。

/* 基本用法一 */
Person.defaultProps = {
name: 'Guest'
}; Person.propTypes = {
name: React.PropTypes.string
}; /*
基本用法二 */
propTypes: {
myArray: React.PropTypes.array,
myBool: React.PropTypes.bool,
myFunc: React.PropTypes.func,
myNumber: React.PropTypes.number,
myString: React.PropTypes.string, // You can chain any of the above with `isRequired` to make sure a warning
// is shown if the prop isn't provided.
requiredFunc: React.PropTypes.func.isRequired
}

      当props是更为复杂的结构对象,

如:

{
text: 'hello world',
numbers: [5, 2, 7, 9],
}

则可使用进阶使用方法:shape() 和 arrayOf(),详细教程

 知识点三:Do not check existence of props at the root of a component. Components should not have two possible return types.



-----------------------------------2017.12.26新增:----------------------------
React的一些编程思想:
state尽量抽取到公共父组件(容器组件)上,子组件(展示组件)不应该有自己的state,数据都是父组件专递过来的,子组件的更新依赖于父的state的更新引起的专递给自己的props的数据的改变,很多时候子组件自己需要自己控制自己更新,
那怎么办呢?只能操作父组件上的state.
由于组件只能更新它们自己的 state(状态),所以父组件应给相应的子组件传递setState回调方法。子通过此回调来改变父的state,从而实现自身的更新;

react知识点汇总的更多相关文章

  1. React知识点总结1

    最近打算把react知识点总结下: React特点 1.虚拟DOM 在内存中操作DOM,在内存中创建数据结构,只会更新有差异的地方 2.组件化 页面分成若干个组件,每个组件包含逻辑结构和样式 组件仅包 ...

  2. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  3. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  4. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  5. c++ 函数知识点汇总

    c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...

  6. 前端开发 JavaScript 干货知识点汇总

    很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...

  7. BBS项目知识点汇总

    目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...

  8. Java面试知识点汇总

    Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总   版权声明 ...

  9. 离散数学 II(最全面的知识点汇总)

    离散数学 II(知识点汇总) 目录 离散数学 II(知识点汇总) 代数系统 代数系统定义 例子 二元运算定义 运算及其性质 二元运算的性质 封闭性 可交换性 可结合性 可分配性 吸收律 等幂性 消去律 ...

随机推荐

  1. Spring MVC+MySQL保存中文变成乱码

    环境:MySQL,Spring MVC3.2.0,jQuery v2.0.3,使用JdbcTemplate访问数据库,相当于全套Spring解决方案. 现象 直接使用表单POST,或者使用jQuery ...

  2. 模仿 AppStore 顶部动画

    App Store 顶部动画 App Store 中 Games.Apps.Updates 的顶部动画的特点: 自然状态下是大标题,右边有一个 button 顶上去时,变成小标题,右边按钮消失 导航栏 ...

  3. D09——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D09 20180903内容纲要: 线程.进程 1.paramiko 2.线程.进程初识 3.多线程 (1)线程的调用方式 (2)join (3)线程锁.递归锁. ...

  4. 题解 P1731 【生日蛋糕】

    题面传送门 如果不懂DFS,请自觉睡觉: 如果不懂剪枝,请自觉睡觉: 啊哈,大家的思路一定和我一样--DFS,找个数组存储半径和高,可是如单单使用DFS不加剪枝的话,10分--20分. 所以,我们来想 ...

  5. centos7搭建kafka集群-第一篇

    Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...

  6. subscripts(下标)

    /* subscripts(下标): 访问对象中数据的快捷方式 所谓下标脚本语法就是能够通过, 实例[索引值]来访问实例中的数据 类似于以前我们访问数字和字典, 其实Swift中的数组和字典就是一个结 ...

  7. rabbitmq系列四 之路由

    1.路由 在上一个的教程中,我们构建了一个简单的日志记录系统.我们能够向许多接收者广播日志消息. 在本次教程中,我们向该系统添加一些特性,比如,我只需要严重错误(erroe级别)的部分日志打印到磁盘文 ...

  8. 使用json-lib-*.jar的JSON解析工具类

    使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...

  9. Exceptionless搭配log4net记录日志

    接上篇: Exceptionless 本地部署 在部署完成后可以使用log4net搭配Exceptionless来记录日志. 过程很简单,使用Nuget安装Exceptionless.Log4net, ...

  10. Android 开发工具类 13_ SaxService

    网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ...