Проверяет понимание разницы между прямым и косвенным родителем в React при использовании HOC, что важно для корректной работы с пропсами и реф-ами.
В React дерево компонентов строится по тому, как компоненты рендерят друг друга в JSX. Прямой родитель — это тот компонент, внутри render или возвращаемого JSX которого непосредственно находится другой компонент. Косвенный родитель появляется, когда между ними вставляется дополнительный слой, например HOC (Higher-Order Component), который создаёт новый компонент-обёртку.
Рассмотрим простой HOC, который добавляет проп theme:
function withTheme(WrappedComponent) {
return function WithTheme(props) {
return <WrappedComponent theme="dark" {...props} />;
};
}
function Button({ theme }) {
return <button className={theme}>Click</button>;
}
const ThemedButton = withTheme(Button);
function App() {
return <ThemedButton />;
}
Здесь для Button прямым родителем в дереве React является WithTheme, а App — косвенным родителем, потому что он рендерит ThemedButton, который внутри разворачивается в WithTheme, а тот уже рендерит Button.
ref не передаётся через HOC автоматически, потому что ref — это специальный проп. Если App передаст ref в ThemedButton, он попадёт на WithTheme, а не на Button. Чтобы исправить это, используют React.forwardRef.React.memo.function withTheme(WrappedComponent) {
const WithTheme = React.forwardRef((props, ref) => (
<WrappedComponent ref={ref} theme="dark" {...props} />
));
return WithTheme;
}
Теперь ref, переданный из App, дойдёт до Button, несмотря на косвенного родителя WithTheme.
Итог: понимание прямого и косвенного родителя помогает правильно работать с ref, контекстом и оптимизацией в HOC. Применяйте forwardRef и осознанно проектируйте композицию, чтобы избежать неожиданного поведения.
Уровень
Рейтинг:
3
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию