В React-компонентах на базе классов ES6 разница между super() и super(props) в том, когда ты можешь обратиться к this.props внутри конструктора.
Когда ты передаёшь props в super(), ты инициализируешь родительский класс с этим аргументом, и this.props сразу становится доступен внутри конструктора:
class MyComponent extends React.Component {
constructor(props) {
super(props)
console.log(this.props) // { name: 'John', ... }
}
}
Это рекомендуемый подход, если тебе нужно использовать props в момент создания компонента.
Когда ты вызываешь super() без аргументов, родительский класс инициализируется без props. В результате this.props остаётся undefined внутри конструктора:
class MyComponent extends React.Component {
constructor(props) {
super()
console.log(this.props) // undefined
}
}
За пределами конструктора оба подхода работают одинаково — this.props будет доступен и будет содержать корректные значения вне зависимости от того, какой вариант ты использовал. React автоматически присваивает props экземпляру после инициализации.
Используй super(props) как стандартное соглашение при наследовании от React-компонентов. Это гарантирует, что props будут доступны во всём конструкторе, если понадобятся, и делает код более предсказуемым и удобным в поддержке. Современная разработка на React всё больше тяготеет к функциональным компонентам с хуками, что полностью избавляет от этой проблемы.
Вызов super() без аргументов в конструкторе React класса приводит к тому, что this.props остаётся undefined только внутри конструктора, тогда как за его пределами this.props становится доступным нормально.
Новый — ещё не проверен сообществом
Вы