Компилятор React сохраняет ваши вызовы useMemo, useCallback и React.memo. Если вы мемоизировали что-то вручную, компилятор считает, что на это была причина, и не уберёт эту мемоизацию. Но неполный список зависимостей не даёт компилятору понять поток данных в коде и применить дальнейшие оптимизации.
// ✅ Complete dependenciesfunctionComponent({data,filter}){constfiltered=useMemo(()=>data.filter(filter),[data,filter]// All dependencies included);return<Listitems={filtered}/>;}// ✅ Or let the compiler handle itfunctionComponent({data,filter}){// No manual memoization neededconstfiltered=data.filter(filter);return<Listitems={filtered}/>;}
Может возникнуть вопрос, делает ли компилятор React ручную мемоизацию ненужной:
1 2 3 4 5 6 7 8 910
// Do I still need this?functionComponent({items,sortBy}){constsorted=useMemo(()=>{return[...items].sort((a,b)=>{returna[sortBy]-b[sortBy];});},[items,sortBy]);return<Listitems={sorted}/>;}
Если вы используете компилятор React, её можно спокойно убрать:
12345678
// ✅ Better: Let the compiler optimizefunctionComponent({items,sortBy}){constsorted=[...items].sort((a,b)=>{returna[sortBy]-b[sortBy];});return<Listitems={sorted}/>;}