Class组件详解

本文详细介绍了React Class组件的创建、props与state的使用、生命周期方法,包括constructor、shouldComponentUpdate、render、componentDidMount、componentDidUpdate和componentWillUnmount,并提供了实践中的注意事项和最佳实践。
摘要由CSDN通过智能技术生成

Class 组件详解

目录
一.class组件的创建方式
二.props和state
三.生命周期Lifecycle

创建 class 组件

两种方式
第1.ES5方式(过时)
import React from 'react'
const A = React.createClass({
   
  render() {
   
    return ( <div>hi</div> )
  }
})
export default A
// 由于ES5不支持class,才会有这种方式2.ES6方式(推荐)
import React from 'react';
class B extends React.Component {
   
  constructor(props) {
   
    super(props);
  }
  render() {
   
    return (
      <div>hi</div>
    )
  }
}
export default B;

浏览器不支持ES6怎么办?
用webpack+babel将ES6翻译成ES5即可

props

对组件来说组件内就是内部,组件外就是外部。
1.传入props给B组件
在这里插入图片描述

(1)外部数据一般都来自父元素的state,state是怎么作为props的?
this.state.name作为B的外部属性。
(2)把外面的onClick函数传给onClick属性,这个onClick不是state,就是类的一个方法。传的是地址,对象只会拷贝地址。
(3)外部数据被包装为一个对象
name、onClick会变成对象{name:'frank',onClick:...,children:'hi'}
children就是hi,如果里面写了2个东西,就会变成一个数组放在children里。
(4)onClick就是回调

2.props如何初始化

class B extends React.Component {
   
  constructor(props) {
    //这个props是从外部父组件接收来的
    super(props); //super会把props放到this上
  //this.state={n:0} 初始化,如果写了初始化那必须写constructor
  }
  render(){
   }
}
要么不初始化,即不写constructor
要么初始化,且必须写全套(不写super直接报错)

效果
这么做了之后,this.props就是外部数据对象的地址了。

3.读取props
在这里插入图片描述

把外部传进来的函数 复制给div的onClick props
直接展示{this.props.name}

用对象的语法来读取并展示{this.props.children}
通过this.props.xxx读取

4.怎么写props?
永远不准对props进行任何的改写,不准写props!

//不要这样写
this.props={
    另一个对象}
this.props.xxx='hi'

相关钩子
componentWillReceiveProps钩子(被弃用)
当组件接收新的props时,会触发此钩子

面试题
Props的作用
1.接受外部数据
只能读不能写,外部数据由父组件传递
2.接收外部函数
在恰当的时机,调用该函数。比如说当某个div被点击时调用
该函数一般是父组件的函数

State(读) & setState(写)

1.初始化

class B extends React.Component{
   
  constructor(props) {
   
    super(props);
    this.state = {
    //初始化
      user: {
   name:'frank', age:18}
      }
  }
    render() {
     ...  }
  }
}

2.读写State
读用this.state

this.state.xxx.yyy.zzz

写用this.setState(???,fn)
第1个参数有2种情况:

1' this.setState(newState,fn)
⚠️注意:setState不会立即改变this.state,会在当前代码运行完后,再去更新this.state,从而触发UI更新

2' this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老老老老李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值