React类组件详解

73 阅读2分钟

1。创建方法

ES5

import React, { } from "react"

const A = React.createClass({
    render() {
        return
    },
})

ES6

import React, { } from "react"

class App extends React.Component{
    constructor(props) {
        super(props)
    }
    render () {
        return()
    }
}

2.外部属性Props

import React, { } from "react"

class App extends React.Component{
    constructor(props) {
        super(props)
        this.state = {name:"XXX"}
    }
    render () {
        return<B name={this.state.name} onClick={this.onClick}>hi</B>
    }
}

所有的外部数据被包装成 {name:'frank',onClick:...,children:'hi'}这样的对象

构造函数要么不写,写就必须写super(props)这一段,使得this.props指向外部数据的地址

读取时使用this.props.XXX进行读取

对Props进行写操作是没有意义的

componentWillReceiveProps弃用的钩子,代表组件即将接受新的Props

3.内部数据State

import React, { } from "react"

class App extends React.Component{
    constructor(props) {
        super(props)
        this.state = {XXX:"ZZZ"}
    }
    render () {
        return<B name={this.state.name} onClick={this.onClick}>hi</B>
    }
}

读取方式:this.state.XXX

修改方式

  1. this.setState(newState,fn),不会立即修改UI,而是等当前代码执行完成后进行异步更新
  2. 建议使用this.setState((state,props)=>newState,fn)
  3. 写入时React会对第一级的属性进行自动合并

4. 生命周期

挂载

当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:

  • constructor(): 在 React 组件挂载之前,会调用它的构造函数。
  • getDerivedStateFromProps(): 在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。
  • render(): render() 方法是 class 组件中唯一必须实现的方法。
  • componentDidMount(): 在组件挂载后(插入 DOM 树中)立即调用。

更新

每当组件的 state 或 props 发生变化时,组件就会更新。当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:

  • getDerivedStateFromProps(): 在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。根据 shouldComponentUpdate() 的返回值,判断 React 组件的输出是否受当前 state 或 props 更改的影响。
  • shouldComponentUpdate():当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。
  • render(): render() 方法是 class 组件中唯一必须实现的方法。
  • getSnapshotBeforeUpdate(): 在最近一次渲染输出(提交到 DOM 节点)之前调用。
  • componentDidUpdate(): 在更新后会被立即调用。

卸载

当组件从 DOM 中移除时会调用如下方法:

  • componentWillUnmount(): 在组件卸载及销毁之前直接调用。

image.png

具体的参数和使用方法参考官方文档