zoukankan      html  css  js  c++  java
  • props和state

    React组件的数据分为2种,prop和state。prop是组件的对外接口,组件不应该修改props的值。state是组件的内部状态,必须是一个js对象,存在的意义角色被修改。

    prop:

    1.prop支持多种数据类型。当prop的类型不是字符串类型时,在JSX中必须使用花括号把prop值包住。

    2.在父组件中给prop赋值

    class ControlPanel extends Component{
      render(){
        console.log('enter ControlPanel render');
        return(
          <div style={style}>
            <Counter caption='First'/>
            <Counter caption='Second' initValue={10}/>
            <Counter caption='Third' initValue={20}/>
            <button onClick={()=>this.forceUpdate()}>Click me to re-render!</button>
          </div>
        );
      }
    }
    在每个Counter实例中,都使用了caption和initValue两个prop。通过名为caption的prop,ControlPanel传递给Counter组件实例说明文字。通过名为initValue的prop传递给Counter组件一个初始的计数值。
    3.在子组件中读取prop值
    1)
    constructor(props){
        super(props);//调用父类的构造函数,必须写在第一行
      }
    如果在构造函数中没有调用super(props);那么组件实例被构造之后,类实例的所有成员函数就无法通过this.props访问到父组件传递过来的props值。
    2)在构造函数中通过参数props获得传入的props值。在其他函数中通过this.props访问传入的prop值。
    4.设置props默认值
    Counter.defaultProps={
      initValue:0
    };
    5.propTypes检查
    在es6方法定义的组件类中,可以通过增加类的propTypes属性来定义prop规格。
    问题:从react15.5.0版本开始,protypes属性被拆分出来了,需要单独安装。

    方法:$ npm install prop-types

       import PropTypes from 'prop-types';

    state:

    1.初始化state

    通常在组件类构造函数结尾处初始化state

    constructor(props){
     ...
        this.state = {
          count: props.initValue
        }
      }
    2.读取和更新state
    onClickIncrementButton(){
        this.setState({count:this.state.count+1});
      }
    this.state可以读取到组件的当前state
    this.setState();可以改变组件的state
    prop和state的对比
    prop用于定义外部接口,state用于记录内部状态。
    prop的赋值在外部使用组件时,state的赋值在组件内部。
    组件不应该改变prop的值,而state存在的目的就是让组件来改变的。
    UI=render(data)
    React组件就是render函数的角色。
  • 相关阅读:
    编译原理之理解文法和语言
    利用微信电脑最新版 反编译微信小程序 无需root
    编译程序与翻译程序、汇编程序的联系与区别,编译过程包括的几个主要阶段,解释程序与编译程序的区别
    New
    自我介绍+软工5问
    Sharepoint + Office Infopart + Quick Apps for Sharepoint搭建无纸化工作平台
    练练脑javascript写直接插入排序和冒泡排序
    TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之二 数据处理
    TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之一
    Django+Tastypie作后端,RequireJS+Backbone作前端的TodoMVC
  • 原文地址:https://www.cnblogs.com/cdx0/p/prop_state.html
Copyright © 2011-2022 走看看