①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,从而实现自身的更新;

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
  2. JAVA学习心得
  3. How Tomcat works — 六、tomcat处理请求
  4. 测试mysql的sql语句预编译效果
  5. JavaScript 上万关键字瞬间匹配——借助Hash表快速匹配
  6. iOS学习之UI可视化编程-StoryBoard
  7. JavaWeb项目开发案例精粹-第6章报价管理系统-001需求分析及设计
  8. Ogre分层渲染 (转)
  9. oracle--number
  10. Java---类反射(2)---类反射加强
  11. 【Python网络编程】多线程聊天软件程序
  12. make执行过程
  13. SpringMVC4+MyBatis+SQL Server2014+druid 监控SQL运行情况
  14. 使用Homebrew安装MySQL
  15. Windows8.1 与Ubuntu14.04双系统
  16. C语言--第七周作业
  17. .NET Core TDD 前传: 编写易于测试的代码 -- 缝
  18. 补习系列(8)-springboot 单元测试之道
  19. iOS pthread
  20. Git让你从入门到精通,看这一篇就够了

热门文章

  1. 语法糖----C#的async和await
  2. JavaScript里的Date 对象属性及对象方法--实现简单的日历
  3. express+nodemon 修改后浏览器自动刷新
  4. 【JXOI2018】排序问题 贪心
  5. C++运算符重载三种形式(成员函数,友元函数,普通函数)详解
  6. Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议
  7. Windows环境下执行hadoop命令出现Error: JAVA_HOME is incorrectly set Please update D:\SoftWare\hadoop-2.6.0\conf\hadoop-env.cmd错误的解决办法(图文详解)
  8. visual studio 2008 快捷键
  9. Apache POI导出excel
  10. kafka报错处理