# 基于class关键字创建组件
Class组件称之为有状态组件。即组件的私有状态 。
## 使用 class 关键字来创建组件
在学习的过程中先书写 如下代码,通过报错提示得知:在class创建的组件中,必须定义一个render函数
```
class Hi extends React.Component{
}
```
把render(){}函数书完完毕后,又会报错得知:在render函数中,必须返回一个null或者符合规范的虚拟DOM元素
```
class Hi extends React.Component{
// 通过报错提示得知:在class创建的组件中,必须定义一个render函数
render(){
}
}
```
最终我们可以书写成以下的代码
```
class Hi extends React.Component{
// 通过报错提示得知:在class创建的组件中,必须定义一个render函数
render(){
// 在render函数中,必须返回一个null或者符合规范的虚拟DOM元素
return <div>
<h1>这是用 class 关键字创建的组件!</h1>
</div>;
}
}
```
## 组件通信-父向子传递数据
### 演示学习
普通构造函数定义的子组件是通过形参书写props来接收父组件传递的数据。
class定义的子组件该如何接收父组件传递的数据?能直接按下面写代码?
```
class Hi extends React.Component{
render(){
return <div>
<h1>你好{props.name}年龄是{props.age}</h1>
</div>;
}
}
var obj = {
name:'小白',
age:16
}
ReactDom.render(<Hi {...obj}/>,document.getElementById('root'))
```
肯定是不可以按照上面的方式书写会报错。`Uncaught ReferenceError: props is not defined`props没有定义。
### 正确思路
我们知道在学习Class类时候我们还有个constructor构造函数。这里面是可以传值的。
~~~
class Hi extends React.Component{
constructor(props){
super(props); //super写在构造函数的第一行
}
render() {
return(
<div>你好{this.props.name}年龄是{this.props.age}
</div>
);
}
}
~~~
在constructor中接收父组件传递的值。还要记得必须写super(props)因为组件是继承过来的
## webstormJS模板
我们发现每次为了书写一个class组件,要写很多单词中,一不小心就会出错。我们可以去配置webstorm的模板。
![](https://box.kancloud.cn/4bd35c5ba8542149700150a8bb56d9b1_1479x940.png)
### 模板文件需要先拷贝
```
import React,{Component} from 'react';
export default class $className$ extends Component{
constructor(props){
super(props);
this.state = {}
}
render() {
return (
<div>这是$name$$end$组件</div>
);
}
}
```
![](https://box.kancloud.cn/361f57d57e36416426fa4c756eeedbdf_1481x937.png)
![](https://box.kancloud.cn/ee3256a51d798dd2a91dced273b0070f_1482x937.png)
![](https://box.kancloud.cn/29277dafc86105afc5f2e54e8551ca89_1000x374.png)
![](https://box.kancloud.cn/50205046f3211403bb268a21f9bb5949_1000x374.png)
![](https://box.kancloud.cn/32d8c7db660561fcea38fd5aeb766c83_1496x946.png)
### 使用
新建tabbar.js在文件中书写react会立即生成我们想要的Class组件。
- webpack复习
- React基础
- 前端三大主流框架对比
- React中几个核心的概念
- React基础语法
- React JSX语法
- React组件
- 普通组件
- 组件通信-父向子传递
- 组件拆成单个文件
- 面向对象复习
- Class组件基础
- Class组件的私有状态(私有数据)
- 案例:实现评论列表组件
- 组件样式管理
- 组件样式分离-样式表
- CSS模块化
- 生命周期
- React组件生命周期
- Counter组件来学习组件生命周期
- 生命周期总结
- 生命周期案例
- React评论列表
- React双向数据绑定
- React版todolist
- 其它提高(了解)
- 组件默认值和数据类型验证
- 绑定this并传参的三种方式
- 祖孙级和非父子组件传递数据(了解)
- React路由
- 路由基础
- 动态路由
- 路由严格模式
- 路由导航定位
- 路由重定向
- 路由懒加载
- WolfMovie项目
- 项目初始化
- AntDesign使用
- 其它相关了解