react的state和props

state状态和props属性是react非常重要的两个方面,状态控制组件内部的变化,属性获取外部传递给内部的数据,当state和props改变时,会重新调用render方法,渲染dom对象。

state状态

常用方法:

  1. getInitialState:获取组件的初始化状态,在组件加载的时候调用(render前)
  2. this.state:获取组件的状态的值,但不能通过this.state.xxx = xxx改变状态的值
  3. this.setState:用来改变组件状态的值 ,用法如下
var Radio= React.createClass({ 
  // 定义组件的初始状态,初始为关 
  getInitialState: function() {
     return { checked: false } 
  }, // 通过 this.state 获取当前状态 
  changeCheck: function() { 
    this.setState({ checked: !this.state.checked}); }
 }),
  render: function() {
     return <label className="radio"> 
        <input type="radio" checked={this.state.checked} onChange={this.changeCheck}/> 选中
      </label> 
},
 // 通过 setState 修改组件状态 // setState 过后会 React 会调用 render 方法重渲染 

props属性

常用方法:
1.this.props.xxx 用来获取写在组件中的xxx属性的值 注意jsx中class属性为 className,for属性为 htmlFor;
2.getDefaultProps:获取默认的属性对象,在render前调用一次,用于将组件中绑定的属性添加到this.props ;可以设置默认值,当组件属性没传值时,调用默认值;
3.this.props.children :获取子节点的属性,其中children只能为一个元素,不能为组件

var GetChildItem = React.createClass({ 
  render: function() { 
    var props = this.props; 
    return <div className="todo-item"> 
      <span class="todo-item__name">{props.children}</span> 
    </div> 
    }
 });
 ReactDOM.render( 
    <GetChildItem >子节点内容</GetChildItem >, document.getElementById('example'));
  1. propsType用来校验属性传递的正确性(非空,类型验证等),通常写在最前面;
    var MyComponent = React.createClass({
        propTypes: {
            optionalRequired:React.PropTypes.isRequired,//不能为空
            optionalArray: React.PropTypes.array,
            optionalBool: React.PropTypes.bool,
            optionalFunc: React.PropTypes.func,
            optionalNumber: React.PropTypes.number,
            optionalObject: React.PropTypes.object,
            optionalString: React.PropTypes.string,
            // 任何可以被渲染的包括,数字,字符串,组件,或者数组
            optionalNode: React.PropTypes.node,
            // React 元素
            optionalElement: React.PropTypes.element,
            customProp: function(props, propName, componentName) {}//自定义校验
        }
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,879评论 1 18
  • 目前,react组件有三种写法,分别是es5的createClass写法,es6的class写法,以及statel...
    ZoomFunc阅读 1,869评论 0 1
  • React Native是基于React的,在开发React Native过程中少不了的需要用到React方面的知...
    亓凡阅读 1,528评论 1 4
  • 现在最热门的前端框架,毫无疑问是 React 。上周,基于 React 的 React Native 发布,结果一...
    sakura_L阅读 448评论 0 0
  • GUIDS 第一章 为什么使用React? React 一个提供了用户接口的JavaScript库。 诞生于Fac...
    jplyue阅读 3,628评论 1 11