Heim >Web-Frontend >Front-End-Fragen und Antworten >Was ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

Was ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

青灯夜游
青灯夜游Original
2022-07-13 19:13:461852Durchsuche

Der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React: 1. Drei Willens-Hooks wurden aus dem neuen Lebenszyklus entfernt, nämlich ComponentWillMount, ComponentWillReceiveProps und ComponentWillUpdate. 2. Zwei neue Hooks wurden dem neuen Lebenszyklus hinzugefügt. nämlich getDerivedStateFromProps (von Requisiten abgeleiteten Status abrufen) und getSnapshotBeforeUpdate.

Was ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

Die Betriebsumgebung dieses Tutorials: Windows 7-System, React18-Version, Dell G3-Computer.

React hat zwei Lebenszyklen vor und nach Version 16.3, und danach war es die neue Version. Obwohl es Unterschiede zwischen der alten und der neuen Version gibt, sind die Hauptfunktionen ähnlich.

React-Lebenszyklus (alt)

Was ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

Es ist hervorzuheben, dass die Funktion componentWillReceiveProps nicht aufgerufen wird, wenn Requisiten zum ersten Mal übergeben werden, sondern erst nach dem zweiten Mal (einschließlich). beim zweiten Mal) Wird nur aufgerufen, wenn Requisiten übergeben werden

shouldComponentUpdateWie bei einem Ventil ist ein Rückgabewert (wahr oder falsch) erforderlich, um zu bestimmen, ob der Status dieses Updates neu gerendert werden muss

React-Lebenszyklus (neu)

Was ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

Der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React

Der neue Lebenszyklushat drei Will-Hooks entfernt, nämlich: componentWillMount, ComponentWillReceiveProps, ComponentWillUpdate

Der neue Lebenszyklus hat zwei Hooks hinzugefügt, nämlich:

1,

getDerivedStateFromProps: Erhalten Sie den abgeleiteten Status von Requisiten.

  • akzeptiert zwei Parameter: Requisiten, Status.

  • gibt ein Statusobjekt oder Null zurück , wird zum Ändern des Statuswerts verwendet.

  • Verwendungsszenarien: Wenn der Statuswert jederzeit von Requisiten abhängt, können Sie getDerivedStateFromProps verwenden

2,

getSnapshotBeforeUpdate: Holen Sie sich den Snapshot vor dem Update (Sie können die Daten vor dem Update abrufen)

Der Aufruf

vor der Aktualisierung des DOM gibt ein Objekt oder null zurück und der Rückgabewert wird an ComponentDidUpdate

componentDidUpdate() übergeben: Der Aufruf nach der Aktualisierung des DOM

  • akzeptiert drei Parameter: preProps, preState, snapshotValue


Anwendungsfall:

P mit fester Höhe regelmäßig eine Zeile hinzufügen, sodass beim Hinzufügen einer neuen Zeile die Höhe der aktuell angezeigten Zeile unverändert bleibt.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>4_getSnapShotBeforeUpdate的使用场景</title>
<style>
.list{
width: 200px;
height: 150px;
background-color: skyblue;
overflow: auto;
}
.news{
height: 30px;
}
</style>
</head>
<body>
<!-- 准备好一个“容器” -->
<div id="test"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/17.0.1/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DOM -->
<script type="text/javascript" src="../js/17.0.1/react-dom.development.js"></script>
<!-- 引入babel,用于将jsx转为js -->
<script type="text/javascript" src="../js/17.0.1/babel.min.js"></script>
 
<script type="text/babel">
class NewsList extends React.Component{
 
state = {newsArr:[]}
 
componentDidMount(){
setInterval(() => {
//获取原状态
const {newsArr} = this.state
//模拟一条新闻
const news = &#39;新闻&#39;+ (newsArr.length+1)
//更新状态
this.setState({newsArr:[news,...newsArr]})
}, 1000);
}
 
getSnapshotBeforeUpdate(){
return this.refs.list.scrollHeight
}
 
componentDidUpdate(preProps,preState,height){
this.refs.list.scrollTop += this.refs.list.scrollHeight - height
}
 
render(){
return(
<div className="list" ref="list">
{
this.state.newsArr.map((n,index)=>{
return <div key={index} className="news">{n}</div>
})
}
</div>
)
}
}
ReactDOM.render(<NewsList/>,document.getElementById(&#39;test&#39;))
</script>
</body>
</html>

Erklärung:

In React v16.3 werden neue Lebenszyklusänderungen eingeleitet. Es wird auch der alte Lebenszyklus verwendet, allerdings ist auf der Konsole eine Deprecation-Warnung zu sehen. Es erinnert auch daran, dass drei Lebenszyklus-Hooks veraltet sind. Versuchen Sie daher, sie nicht zu verwenden. Oder Sie können das Präfix

davor einfügen. UNSAFE_

【Verwandte Empfehlung:

Redis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen dem alten und dem neuen Lebenszyklus von React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn