React 组件生命周期详解
创作时间:
作者:
@小白创作中心
React 组件生命周期详解
引用
1
来源
1.
https://www.runoob.com/react/react-component-life-cycle.html
React组件生命周期是React开发中的核心概念之一,它描述了组件从创建到销毁的整个过程。本文将详细介绍React组件的生命周期,并通过实例代码帮助读者更好地理解这些生命周期方法的使用场景。
在本章节中我们将讨论 React 组件的生命周期。
组件的生命周期可分成三个状态:
- Mounting(挂载):已插入真实 DOM
- Updating(更新):正在被重新渲染
- Unmounting(卸载):已移出真实 DOM
挂载
当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:
render() 方法是 class 组件中唯一必须实现的方法,其他方法可以根据自己的需要来实现。
这些方法的详细说明,可以参考官方文档。
更新
每当组件的 state 或 props 发生变化时,组件就会更新。
当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:
render() 方法是 class 组件中唯一必须实现的方法,其他方法可以根据自己的需要来实现。
这些方法的详细说明,可以参考官方文档。
卸载
当组件从 DOM 中移除时会调用如下方法:
- componentWillUnmount()
: 在组件卸载及销毁之前直接调用。
这些方法的详细说明,可以参考官方文档。
实例
以下是一个当前时间的实例,每秒更新:
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = { date: new Date() };
}
componentDidMount() {
this.timerID = setInterval(() => this.tick(), 1000);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({ date: new Date() });
}
render() {
return (
<div>
<h1>Hello, Runoob!</h1>
<h2>现在时间是:{this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
const root = ReactDOM.createRoot(document.body);
root.render(<Clock />);
以下实例在 Hello 组件加载以后,通过 componentDidMount 方法设置一个定时器,每隔100毫秒重新设置组件的透明度,并重新渲染:
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = { opacity: 1.0 };
}
componentDidMount() {
this.timer = setInterval(function () {
var opacity = this.state.opacity;
opacity -= .05;
if (opacity < 0.1) {
opacity = 1.0;
}
this.setState({ opacity: opacity });
}.bind(this), 100);
}
render() {
return (
<div style={{ opacity: this.state.opacity }}>
Hello {this.props.name}
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Hello name="world" />);
以下实例初始化state,setNewnumber用于更新state。所有生命周期在Content组件中。
class Button extends React.Component {
constructor(props) {
super(props);
this.state = { data: 0 };
this.setNewNumber = this.setNewNumber.bind(this);
}
setNewNumber() {
this.setState({ data: this.state.data + 1 });
}
render() {
return (
<div>
<button onClick={this.setNewNumber}>INCREMENT</button>
<Content myNumber={this.state.data} />
</div>
);
}
}
class Content extends React.Component {
componentDidMount() {
console.log("Component DID MOUNT!");
}
shouldComponentUpdate(newProps, newState) {
return true;
}
componentDidUpdate(prevProps, prevState) {
console.log("Component DID UPDATE!");
}
componentWillUnmount() {
console.log("Component WILL UNMOUNT!");
}
render() {
return (
<div>
<h3>{this.props.myNumber}</h3>
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<div>
<Button />
</div>
);
热门推荐
从共同兴趣到社交媒体:现代人维系友谊全攻略
深度解析天顶星座摩羯座男的性格特点和爱情观
摩羯座想要的怎样的爱情???
徐州出发云南古城:机票最便捷,自驾最省钱
盐酸阿糖胞苷用药需谨慎,过量可致多器官损害
药物治疗配合生活调理,这样应对气管炎最有效
唐山大地震:从废墟到现代化城市的重生之路

全国已有十余城推出官方市歌:什么样的歌曲能为一座城市代言
如何正确挑选核桃?四招教您不踩坑!
故事村里的新中国:白鸭垴村的75年变迁
爱吃核桃的人,血管和大脑都不一样,还能延寿!但吃够量才最受益
川哥红线:用生命点亮他人幸福的网红情感专家
儿童反复支气管肺炎怎么办?专家解析病因与应对方案
打卡儋州东坡书院&热带动物园,周末安排走起!
阿司匹林新指南:心血管疾病预防有变?
阿司匹林正确服用,护心有方
行为异常属于精神病吗?如何识别与应对
千年古刹奉国寺:42躯辽代飞天彩绘展现独特艺术魅力
民歌:中国民间音乐的瑰宝
20句最适合表白的诗词,愿得一人心,白首不相离。
辽宁奉国寺:保存2000平米辽代彩画的国宝级寺院
奉国寺:千年古刹藏世界最大辽代佛殿与佛像群
奉国寺:保存最完整的辽代建筑彩画群
兰州兰山公园成新晋网红打卡地,可俯瞰“兰哈顿”城市景观
金城三日:中山桥、白塔山、网红拉面,玩转兰州精华
兰州三日游精华攻略:免费博物馆到水墨丹霞全攻略
公交、地铁无缝换乘!广州多个交通枢纽迎来重要进展
儋州摄影胜地:东坡书院&松涛水库
儋州千年古盐田:见证中国制盐工艺的活化石
龙门激浪:儋州最美海岸线上的自然奇观