ホームページ >ウェブフロントエンド >フロントエンドQ&A >React の古いライフサイクルと新しいライフサイクルの違いは何ですか

React の古いライフサイクルと新しいライフサイクルの違いは何ですか

青灯夜游
青灯夜游オリジナル
2022-07-13 19:13:461849ブラウズ

react の古いライフ サイクルと新しいライフ サイクルの違い: 1. 新しいライフ サイクルからは、componentWillMount、componentWillReceiveProps、componentWillUpdate という 3 つの Will フックが削除されました; 2. 2 つの新しいフックが、新しいライフサイクル、つまり getDerivedStateFromProps. (プロパティから派生した状態を取得) と getSnapshotBeforeUpdate。

React の古いライフサイクルと新しいライフサイクルの違いは何ですか

#このチュートリアルの動作環境: Windows7 システム、react18 バージョン、Dell G3 コンピューター。

React には、バージョン 16.3 の前後で 2 つのライフ サイクルがあります。16.3 より前は古いバージョン、それ以降は新しいバージョンです。古いバージョンと新しいバージョンには違いがありますが、基本的には同じです。

React ライフ サイクル (旧)

React の古いライフサイクルと新しいライフサイクルの違いは何ですか

##強調する価値があります:

componentWillReceivePropsこの関数は、初めてプロパティが渡されたときは呼び出されません。 2 回目 (2 回目も含む) 以降、プロパティが

## で渡されたときにのみ呼び出されます。 #ShouldComponentUpdate

バルブと同様に、この更新のステータスを再レンダリングする必要があるかどうかを判断するには戻り値 (true または false) が必要です

React ライフ サイクル (新規)

React の古いライフサイクルと新しいライフサイクルの違いは何ですか

react の新旧のライフサイクルの違い

新しいライフ サイクルRemove

3 つの Will フックが追加されます。つまり、

componentWillMount、componentWillReceiveProps、componentWillUpdate 新しいライフ サイクルでは、2 つの新しいフック、つまり # が追加されます。 ##1,

getDerivedStateFromProps

: props から派生状態を取得します。

2 つのパラメーターを受け入れます: props、state

  • 戻り値state オブジェクトまたは null。state の値を変更するために使用されます。

  • 使用シナリオ: state の値が props に依存する場合はいつでも、getDerivedStateFromProps

  • 2、

    getSnapshotBeforeUpdate# を使用できます。 ##: 更新前のスナップショットを取得する(更新前のデータを取得できます)
DOM更新前に呼び出します

オブジェクトまたはnullを返し、戻り値はcomponentDidUpdateに渡されます

componentDidUpdate(): DOM の更新後に呼び出されます

3 つのパラメーターを受け入れます: preProps、preState、snapshotValue


  • #ユースケース:

固定高さ p の場合、新しい行を定期的に追加します。これにより、新しい行を追加するときに、現在表示されている行の高さが変更されます。は変わらないままです。

<!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>
注:

React v16.3 では、新しいライフサイクルの変更が導入されています。古いライフサイクルも使用されますが、非推奨の警告がコンソールに表示されます。また、3 つのライフサイクル フックが廃止される予定であるため、使用しないように注意してください。または、その前にプレフィックス

UNSAFE_ を追加することもできます。

[関連する推奨事項:

Redis ビデオ チュートリアル ]

以上がReact の古いライフサイクルと新しいライフサイクルの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。