博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
props和state
阅读量:4484 次
发布时间:2019-06-08

本文共 1493 字,大约阅读时间需要 4 分钟。

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函数的角色。

转载于:https://www.cnblogs.com/cdx0/p/prop_state.html

你可能感兴趣的文章
SourceTree下载 及使用
查看>>
MyEclipse下安装FatJar打包工具
查看>>
什么是域名-视频讲解?
查看>>
大道至简第六章-从编程到工程
查看>>
单元测试——隔离神器:mockito
查看>>
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
zkw线段树
查看>>
作业1226
查看>>
mainline.js主线
查看>>