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
修改方式
this.setState(newState,fn),不会立即修改UI,而是等当前代码执行完成后进行异步更新- 建议使用
this.setState((state,props)=>newState,fn) - 写入时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(): 在组件卸载及销毁之前直接调用。
具体的参数和使用方法参考官方文档