React - React.memo
13578 ワード
今回は、レンダリングのパフォーマンスを最適化しています.
React.覚書について勉強した.
サンプルコードを次に示します.
test関数はすべて持ってきました.
map関数を使用して構成部品をロードしたため、キー値のために再レンダリングするとアンインストールされません.
testからレンダリング項目を削除すると、refreshを使用してrecoil関数を初期化し、testListで使用されるlistはrefreshをlistにします.地図はずっと回ります.
同時に、コンソールはキー値を比較しないことを直接確認してレンダリングを続行します.
まず最初の案で反応しますmemoを使用しますが、コンソールは引き続き撮影されます.
アイテムとして受信したデータを変更することはできません.
各データ値を比較し、一致する場合は再レンダリングは発生しません.
React.覚書について勉強した.
サンプルコードを次に示します.
const testList = ({user,tabSelect}) => {
const list = arr[100]
return (
{list.map((item) =>
<test
key={item.uniqueIdx}
item={item}
user={user}
tabSelect={tabSelect}
/>
}
)
}
const test = ({item,user,tabSelect}) => {
...
return (
<>
<tr className={styles.root}>
<th>
<ToggleIconButton callback={handleIconClick} type={open} />
</th>
<td>
{list.date}
</td>
<td align="center">{list.time}</td>
{!user && <td align="center">{list.userName}</td>}
{!user && <td align="center">{list.nickname}</td>}
<td align="center">{list.title}</td>
</tr>
{open &&
<Box content={list.content} user={user} handleEditProblem={handleEditProblem} handleDeleteProblem={handleDeleteProblem}/>
}
</>
)
}
testList関数はランダムに作成されます.test関数はすべて持ってきました.
map関数を使用して構成部品をロードしたため、キー値のために再レンダリングするとアンインストールされません.
testからレンダリング項目を削除すると、refreshを使用してrecoil関数を初期化し、testListで使用されるlistはrefreshをlistにします.地図はずっと回ります.
同時に、コンソールはキー値を比較しないことを直接確認してレンダリングを続行します.
レンダリングしたくないなら?
まず最初の案で反応しますmemoを使用しますが、コンソールは引き続き撮影されます.
アイテムとして受信したデータを変更することはできません.
export default React.memo(Row,dataPropsEqual);
同様に、比較propsの関数を作成して解決することができる.function dataPropsEqual(prevProps, nextProps){
const {
list:prevList, tabSelect:prevFn, user:prevUser
} = prevProps;
const {
list:nextList, tabSelect:nextFn, user:nextUser
} = nextProps;
const prevListKeys = Object.keys(prevList)
let flag = true;
for( const a of prevListKeys){
if(flag) flag = prevList[a] === nextList[a]
}
return flag && prevFn === nextFn && prevUser === nextUser;
}
リストはitemです各データ値を比較し、一致する場合は再レンダリングは発生しません.
Reference
この問題について(React - React.memo), 我々は、より多くの情報をここで見つけました https://velog.io/@jinpro/React-React.memoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol