React: ошибка "TypeError: Cannot destructure property 'children' of 'undefined'"

Ошибка "TypeError: Cannot destructure property 'children' of 'undefined'" в React возникает, когда код пытается деструктурировать свойство children
из объекта, который оказался undefined
. Рассмотрим, почему возникает эта ошибка, как её устранить и как улучшить обработку подобных ситуаций в React-компонентах.
Почему возникает ошибка "Cannot destructure property 'children' of 'undefined'"
Эта ошибка чаще всего связана с попыткой деструктурировать свойства объекта, который не был передан в компонент или не инициализирован. В React передача children
осуществляется через пропсы, и если по какой-то причине объект с пропсами не передан, то попытка деструктуризации children
вызовет ошибку.
Пример возникновения ошибки
Рассмотрим пример компонента, который пытается деструктурировать children
из пропсов:
function MyComponent({ children }) {
return <div>{children}</div>;
}
function App() {
// Здесь вызывается без детей, но ошибка может возникнуть, если компонент вызван без объекта пропсов
return <MyComponent />;
}
export default App;
Здесь ошибка может возникнуть, если MyComponent
рендерится без пропсов или если родительский компонент не передаёт объект пропсов.
Исправление ошибки: назначение значений по умолчанию
Чтобы избежать этой ошибки, можно указать значения по умолчанию для пропсов. Это позволяет избежать undefined
, даже если объект пропсов не передан:
function MyComponent({ children = null }) {
return <div>{children}</div>;
}
export default MyComponent;
В этом случае children
будет иметь значение null
по умолчанию, и ошибка не возникнет даже при отсутствии пропсов.
Использование значений по умолчанию через параметры функции
Кроме явного указания в теле функции, можно также задать значение по умолчанию на уровне параметра функции:
function MyComponent({ children } = {}) {
return <div>{children}</div>;
}
export default MyComponent;
Здесь используется объект {}
как значение по умолчанию, что позволяет избежать ошибки при отсутствии пропсов.
Советы по предотвращению ошибки
- Устанавливайте значения по умолчанию: Использование значений по умолчанию для пропсов — надёжный способ предотвратить ошибки деструктуризации.
- Проверяйте обязательные пропсы: Если
children
или другие пропсы необходимы, убедитесь, что родительский компонент передаёт их при рендере. - Используйте PropTypes или TypeScript: Эти инструменты помогают указать обязательность пропсов и типы, предотвращая возможные ошибки.
Дополнительные ресурсы и мероприятия
Узнайте больше о работе с рефами в React и о том, как справляться с подобными предупреждениями в статье React: как справиться с предупреждением "Function components cannot be given refs".