Middle
Баррасии коди: шумо як порсияи коди истеҳсолиро доред. Мушкилотҳоро пайдо кунед ва таклифҳои беҳтариро пешниҳод кунед. Оё React.memo мемоизатсияро дуруст иҷро мекунад, агар дар props функсияҳо ва объектҳо гузошта шаванд?
sobes.tech AI
Ҷавоб аз AI
React.memo мемоизирует компонент, предотвращая повторный рендер, если пропсы не изменились по сравнению с предыдущим рендером. Однако, если в пропсах передаются функции или объекты, мемоизация может не сработать корректно, потому что при каждом рендере создаются новые ссылки на функции и объекты, и shallow сравнение React.memo обнаружит изменения.
Чтобы улучшить ситуацию:
- Используйте useCallback для мемоизации функций, чтобы ссылки не менялись без необходимости.
- Используйте useMemo для мемоизации объектов или массивов, передаваемых в пропсы.
Пример:
const Parent = () => {
const [count, setCount] = React.useState(0);
// Функция мемоизируется, ссылка не меняется при ререндере
const handleClick = React.useCallback(() => {
console.log('Clicked');
}, []);
// Объект мемоизируется
const options = React.useMemo(() => ({ enabled: true }), []);
return <Child onClick={handleClick} options={options} />;
};
const Child = React.memo(({ onClick, options }) => {
console.log('Child render');
return <button onClick={onClick}>Click me</button>;
});
Без useCallback и useMemo Child будет ререндериться каждый раз, даже если пропсы логически не изменились.