学習反応(1)-機能設定状態()
8837 ワード
このシリーズでは,DO IT反応式プログラミングを学習する過程で遭遇した困難をまとめた.
反応器には状態の概念,すなわち素子の状態を管理する.
setState()に新しいステータスオブジェクトを追加してパラメータで更新するのに慣れています.しかし学習の過程で理解できないコードが現れた.
検索するとsetStateもパラメータ受信関数として使用できることが分かった.最初のパラメータ:stateとpropsをパラメータとして受け入れる関数 第2のパラメータ:第1の関数を処理した後に実行するコールバック関数
これについていい文章が紹介されている.
原文を調べる
https://www.freecodecamp.org/news/functional-setstate-is-the-future-of-react-374f30401b6b/
オブジェクトを関数に入れるのではなくsetStateのパラメータを使用する理由を知るには、オブジェクトをパラメータとして入れると何が起こるかを知る必要があります. setStateオブジェクトを既存の状態にマージします. これに基づいてステータスを更新し、React Elementを再描画してレンダリングします. これは状態を変えるだけでなく、DOMを再描画するため、かなりの作業です.setStateにオブジェクトを連続的に挿入して更新すると、どうなりますか?
ReactはDOMを3回更新しません.新しいオブジェクトを既存の状態にマージする場合、キーの値が同じ場合は、最近のオブジェクトのみが更新されます.
ただし、関数をパラメータに入れると、反応器はそれをキューに入れて実行します.つまり、最後の値を処理するのではなく、順番に処理された値を次の関数に入れます.その結果、state更新後の値を処理できます.
setStateとは?
反応器には状態の概念,すなわち素子の状態を管理する.
class User extends Component{
constructor(){
this.state = {posts:[],comments:[]}
}
}
リアクターは、これらのステータスをステータスオブジェクトに直接アクセスして変更することを禁止します.どうやって修正すればいいですか?setStateメソッドを直接使用して変更できます.class User extends Component{
constructor(){
this.state = {posts:[],comments:[]}
}
fetchComments().then(response => {
this.setState({
comments: response.comments
});
});
}
Functional setState?
setState()に新しいステータスオブジェクトを追加してパラメータで更新するのに慣れています.しかし学習の過程で理解できないコードが現れた.
onChange(name,updateValue){
this.setState(({values}) => (
values:{
...values,
[name]:updatedValue
}
),() => this.validate(this.state.values))
}
突然、setStateのパラメータに関数があります.あと2つ...検索するとsetStateもパラメータ受信関数として使用できることが分かった.
Why Functional setState?
これについていい文章が紹介されている.
原文を調べる
https://www.freecodecamp.org/news/functional-setstate-is-the-future-of-react-374f30401b6b/
オブジェクトを関数に入れるのではなくsetStateのパラメータを使用する理由を知るには、オブジェクトをパラメータとして入れると何が起こるかを知る必要があります.
ReactはDOMを3回更新しません.新しいオブジェクトを既存の状態にマージする場合、キーの値が同じ場合は、最近のオブジェクトのみが更新されます.
class User extends Component{
constructor(){
this.state = {score:0}
}
update(){
this.setState({score:this.state.score+1});
this.setState({score:this.state.score+1});
this.setState({score:this.state.score+1});
}
}
この結果のscoreは3のようですが、1になります.最後の最終結果しか反映されないからです.さらに悪いことに、setStateのこれらのプロセスは非同期で処理されます.非同期処理は、ステータス更新後の値を処理しにくくします.ただし、関数をパラメータに入れると、反応器はそれをキューに入れて実行します.つまり、最後の値を処理するのではなく、順番に処理された値を次の関数に入れます.その結果、state更新後の値を処理できます.
Reference
この問題について(学習反応(1)-機能設定状態()), 我々は、より多くの情報をここで見つけました https://velog.io/@tlatmdxo123/리액트-공부하기1-Functional-setStateテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol