跳到主要内容

场景

一、统计点击次数


准备 需要用到的生命周期为componentDidMountcomponentDidUpdate

理解 ReactcomponentDidMount 只是在初始化执行一次,后续状态的变更不会触发componentDidMount。因此,有时候我们需要做一件事情,要在componentDidMountcomponentDidUpdate中都写一遍。这样就可以保证初始化更新都可以执行

语法

import React from 'react';

class App extends React.Component {
constructor(props) {
super(props);
this.state = {
num: 1,
};
}

componentDidMount() {
console.log(`按钮点击了 ${this.state.num}`);
}

componentDidUpdate() {
console.log(`按钮点击了 ${this.state.num}`);
}

add() {
const num = this.state.num + 1;
this.setState(() => ({num}));
}

render() {
return (
<div>
<h3>{this.state.num}</h3>
<button type="button" onClick={() => this.add()}>
增加
</button>
</div>
);
}
}

export default App;

对比 React Hooks 写法

二、管理事件监听


准备 需要用到的生命周期为 componentDidMountcomponentWillUnmount

理解 componentDidMount 中注册事件监听, componentWillMount 移除事件监听

语法

import React from 'react';

class App extends React.Component {
componentDidMount() {
window.addEventListener('resize', this.foo);
}

componentWillUnmount() {
window.removeEventListener('resize', this.foo);
}

foo() {
console.log('管理事件监听');
}

render() {
return (
<div>
<h3>管理事件监听</h3>
</div>
);
}
}

export default App;

对比 React Hooks 写法