React|最適化素子性能03(不変性の重要性を考慮する必要はない)
11714 ワード
🔶 不変性の重要性
非常に重要:(反応素子で)更新状態→一定に保つ
🔹 サンプルコード(onToggle)&説明
const onToggle = useCallback((id) => {
setTodos((todos) =>
todos.map((todo) =>
todo.id === id ? { ...todo, checked: !todo.checked } : todo,
),
);
}, []);
const onToggle = useCallback((id) => {
setTodos((todos) =>
todos.map((todo) =>
todo.id === id ? { ...todo, checked: !todo.checked } : todo,
),
);
}, []);
[実施]既存データを修正する場合
→直接xを修正する
→新規シナリオの作成→新規オブジェクトの作成→必要な部分を置換
更新が必要な場所に新しいアレイ/オブジェクトを作成します.
→ React.memoの使用:propsの変化を理解してレンダリング性能を最適化する
🔹 不変性を維持するのは何ですか?
==既存値:xを直接変更&新しい値の作成
🔹 不変性コードの例
const array = [1,2,3,4,5];
// 나쁜 예
const nextArrayBad = array; // 똑같은 배열 가리킴 (배열 복사x)
nextArrayBad[0]=100;
console.log(array === nextArrayBad) // 완전 같은 배열 (true)
// 좋은 예
const nextArrayGood = [...array] // 모두 복사 (배열 내부 값)
nextArrayGood[0]=100;
console.log(array === nextArrayGood) // 다른 배열 (false)
const object = {
foo: 'bar',
value: 1
}
// 나쁜 예
const nextObjectBad = object; // 같은 객체 가리킴 (복사x)
nextObjectBad.value = nextObjectBad.value +1;
console.log(object === nextObjectBad); // true (같은 객체)
// 좋은 예
const nextObjectGood = {
...object, // 모두 복사 (기존 내용)
value: object.value+1 // 새로운 값 덮어 씀
}
console.log(object===nextObjectGood) // false (다른 객체)
🔹 変わらない時はない。
オブジェクトの内部値を検出→新しい値がxを変更したかどうか
→ React.memoでは最適化できません(相互比較)
🔹 展開演算子(…構文)→オブジェクト/配列の内部値をコピーする場合
浅いコピー
=一番外側の値のみコピー
内部値がオブジェクトまたは配列の場合.
内部値は個別にコピーする必要があります.
サンプルコード
const todos = [{id: 1,checked: true},{id:2,checked: true}];
const nextTodos = [...todos];
nextTodos[0].checked=false;
console.log(todos[0]===nextTodos[0]); // true (같은 객체 가리킴)
nextTodos[0]={
...nextTodos[0],
checked:false
}
console.log(todos[0]===nextTodos[0]); // false (새로운 객체를 할당)
🔹 オブジェクト内のオブジェクト
変更せずに新しい値を割り当てる必要があります.
サンプルコード
const nextComplexObject = {
...complexObject,
objectInside:{
...complexObject.objectInside,
enabled: false
}
}
console.log(complexObject === nextComplexObject) // false
console.log(complexObject.objectInside === nextComplexObject.objectInside) // false
利用
immer
→複雑な場合→仕事が楽
🔶 パフォーマンスの最適化は不要
内部データ<100個
更新頻度x
Reference
この問題について(React|最適化素子性能03(不変性の重要性を考慮する必要はない)), 我々は、より多くの情報をここで見つけました https://velog.io/@katej927/React-컴포넌트-성능-최적화-03テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol