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函数的角色。
  • 相关阅读:
    影响Scala语言设计的因素列表
    mysql查询不区分大小写问题分析和解决
    mysql基础之三:char与varchar区别,varchar(M)能存多少
    Springboot Actuator之三:spring boot健康检查对Redis的连接检查的调整
    nginx实现带参数目录域名重定向二级域名方法
    Nginx正则表达式之匹配操作符详解
    微服务API网关 vs. 传统企业级API网关
    无法打开SQL Server的连接
    URAL 1146 Maximum Sum(最大子矩阵的和 DP)
    leetCode 70.Climbing Stairs (爬楼梯) 解题思路和方法
  • 原文地址:https://www.cnblogs.com/cdx0/p/prop_state.html
Copyright © 2011-2022 走看看