はんのうざいりょう
今日コードしている間に不思議な現象を発見しました.非同期論理ではusStateのset関数はバッチできません.したがって、set関数が10個ある場合、レンダリングも10回発生します.バッチはset関数を一定の周期で収集し、1つのキューで一度に処理するという.
反応器は基本的にバッチ処理であることを知っているので理解できませんが、検索してから原因が分かりました.これは私が以前どこで見たかの説明で、その時は分かりませんでしたが、今は分かりました.
結論から,反応器は非同期関数におけるset関数を処理する際にバッチを行わない.したがって、seta、setB、setCはそれぞれレンダリングを生成します.実験の結果,seta,setB,setCはいずれも非同期であった.また、setaが同じ値を2回設定した場合は、1回のみレンダリングされます.
すなわち、set関数を呼び出した後の値が以前の値と異なる場合、レンダリングが発生する条件が発生する.△もちろんです.でも、具を作らないので、ちょっと慌てています.
ただし、上では、seta、setB、setCが1回のレンダリングではなく3回生成されるのは、1つのキューに割り当てるのではなく、バッチではなく、各キューに割り当てられているためのようです.Promiseを3回呼んだつもりでいいです
この結果からset関数には、以前の値と変更後の値を比較することでレンダリング関数を呼び出す論理があるようです.(不確実です.)後で探して、確定したら文章を書きます.
これは興味深い経験で、reaction 18から非同期関数のset関数もバッチ処理されるそうです.早く反応して欲しい
注-Automatic batching for fewer renders in React 18
const noBatching = async () => {
const response = await asyncFunc();
setA();
setB();
setC();
}
たぶんこのようなコードです.この場合、a、b、cが設定され、1回のレンダリングではなく3回のレンダリングが行われる.反応器は基本的にバッチ処理であることを知っているので理解できませんが、検索してから原因が分かりました.これは私が以前どこで見たかの説明で、その時は分かりませんでしたが、今は分かりました.
結論から,反応器は非同期関数におけるset関数を処理する際にバッチを行わない.したがって、seta、setB、setCはそれぞれレンダリングを生成します.実験の結果,seta,setB,setCはいずれも非同期であった.また、setaが同じ値を2回設定した場合は、1回のみレンダリングされます.
すなわち、set関数を呼び出した後の値が以前の値と異なる場合、レンダリングが発生する条件が発生する.△もちろんです.でも、具を作らないので、ちょっと慌てています.
ただし、上では、seta、setB、setCが1回のレンダリングではなく3回生成されるのは、1つのキューに割り当てるのではなく、バッチではなく、各キューに割り当てられているためのようです.Promiseを3回呼んだつもりでいいです
この結果からset関数には、以前の値と変更後の値を比較することでレンダリング関数を呼び出す論理があるようです.(不確実です.)後で探して、確定したら文章を書きます.
これは興味深い経験で、reaction 18から非同期関数のset関数もバッチ処理されるそうです.早く反応して欲しい
注-Automatic batching for fewer renders in React 18
Reference
この問題について(はんのうざいりょう), 我々は、より多くの情報をここで見つけました https://velog.io/@dudtjr913/리액트-batchingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol