Назад к задачам
Т-БанкПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
12
Определение компонентов, переотрисовывающихся при нажатии кнопки в React
Компании, где спрашивали:
Условие задачи
Нужно выяснить, какие части интерфейса будут повторно отрисованы после клика по кнопке Render и объяснить причины такой перерисовки.
import React from 'react';
export default function App() {
const forceUpdate = useForceUpdate();
return (
<div style={{ margin: '20px', padding: '20px', border: '2px solid green' }}>
<button onClick={forceUpdate}>Render</button>
<RenderCount />
<Parent />
</div>
);
}
const Parent = () => {
const [value, setValue] = React.useState('');
const handleChange = (e) => {
setValue(e.target.value);
};
return (
<form style={{ margin: '20px', padding: '20px', border: '2px solid blue' }}>
Input value is: {value}
<RenderCount />
<Child onChange={handleChange} />
</form>
);
};
const Child = ({ onChange }) => {
return (
<div style={{ padding: '20px', margin: '20px', border: '2px solid red' }}>
<input type="text" name="value" onChange={onChange} />
<RenderCount />
</div>
);
};
function RenderCount() {
const renderCount = React.useRef(1);
React.useEffect(() => {
renderCount.current += 1;
});
return (
<div style={{ marginTop: '10px' }}>
Render count: {renderCount.current}
</div>
);
}
Вопросы для анализа:
- Какие компоненты получат новый рендер после вызова
forceUpdate? - Почему
ParentиChildмогут/не могут перерисоваться при этом? - Как работает хук
RenderCountи как он отражает количество рендеров? - Какие оптимизации (например,
React.memo) могли бы изменить поведение?