react生命周期 - K
总结-旧生命周期
初始化阶段: 由ReactDOM.render()触发---初次渲染
- constructor()
- componentWillMount()
- render()
- componentDidMount() ===> 常用
一般在这个钩子中做一些初始化的事,例如:开启定时器,发送网络请求,订阅消息
更新阶段: 由组件内部this.setState()或父组件render触发
- shouldComponentUpdate()
- componentWillUpdate()
- render() ===> 常用
- componentDidUpdate()
卸载组件: ReactDOM.unmountComponentAtNode()触发
组件挂载流程
- componentWillUnmount() ===> 常用
一般在这个钩子中做一些收尾的事,例如:关闭定时器,取消订阅消息
class Count extends React.Component {
// 最先调用
constructor(props) {
super(props);
console.log("count---constructor");
this.state = { count: 0 }
}
// 组件将要挂载
//WARNING! To be deprecated in React v17. Use componentDidMount instead.
componentWillMount() {
console.log("count---componentWillMount");
}
// 组件挂载完毕的钩子
componentDidMount() {
console.log("count---componentDidMount")
}
componentWillUnmount() {
console.log("count---componentWillUnmount");
}
// 控制更新阀门
shouldComponentUpdate(nextProps, nextState) {
console.log("count---shouldComponentUpdate");
return true;
}
// 组件将要更新的钩子
//WARNING! To be deprecated in React v17. Use componentDidUpdate instead.
componentWillUpdate(nextProps, nextState) {
console.log("count---componentWillUpdate")
}
// 组件更新之后
componentDidUpdate(prevProps, prevState) {
console.log("count---componentDidUpdate");
}
add = () => {
let { count } = this.state;
count += 1;
this.setState({ count: count });
}
unload = () => {
root.unmount(document.getElementById("test"));
}
// 初始化渲染,状态更新之后 执行
render() {
const { count } = this.state;
console.log("count---render");
return (
<div>
<h2>当前求和为: {count}</h2>
<button onClick={this.add}>点我加一</button>
<button onClick={this.unload}>卸载组件</button>
</div>
)
}
}
父组件render流程
class A extends React.Component {
constructor(props) {
super(props);
this.state = { carName: "奔驰" };
}
changeCar = () => {
this.setState({ carName: "宝马" });
}
render() {
return (
<div>
<h1>A</h1>
<button onClick={this.changeCar}>换车</button>
<B carName={this.state.carName} />
</div>
)
}
}
class B extends React.Component {
// 组件将要接收到新的props的钩子
//WARNING! To be deprecated in React v17.
// Use new lifecycle static getDerivedStateFromProps instead.
componentWillReceiveProps(props) {
console.log("count---componentWillReceiveProps", props)
}
render() {
return (
<div>
<h1>B</h1>
<h2>现在的车: {this.props.carName}</h2>
</div>
)
}
}
新生命周期
class Count extends React.Component {
// 最先调用
constructor(props) {
super(props);
console.log("count---constructor");
this.state = { count: 0 }
}
// 使用场景极其罕见,state值取决于props
static getDerivedStateFromProps(props, state) {
console.log("getDerivedStateFromProps", props, state);
return null;
}
// 在最近一次渲染之前调用,传值给DidUpdate
getSnapshotBeforeUpdate = (prevProps, prevState) => {
console.log("getSnapshotBeforeUpdate");
return "nihao";
}
// 组件挂载完毕的钩子
componentDidMount() {
console.log("count---componentDidMount")
}
componentWillUnmount() {
console.log("count---componentWillUnmount");
}
// 控制更新阀门
shouldComponentUpdate(nextProps, nextState) {
console.log("count---shouldComponentUpdate");
return true;
}
// 组件更新之后
componentDidUpdate(prevProps, prevState, snapshotValue) {
console.log("count---componentDidUpdate", snapshotValue);
}
add = () => {
let { count } = this.state;
count += 1;
this.setState({ count: count });
}
unload = () => {
root.unmount(document.getElementById("test"));
}
// 初始化渲染,状态更新之后 执行
render() {
const { count } = this.state;
console.log("count---render");
return (
<div>
<h2>当前求和为: {count}</h2>
<button onClick={this.add}>点我加一</button>
<button onClick={this.unload}>卸载组件</button>
</div>
)
}
}
原文链接:https://www.cnblogs.com/ucbb/archive/2023/02/04/17091149.html
原文地址:https://www.cnblogs.com/ucbb/archive/2023/02/04/17091149.html