У меня есть класс ES6, который расширяет React.Component
, то есть компонент React. Допустим, мой компонент выглядит так:
class MyComponent extends React.Component {
constructor({ foo, bar, baz, ...props }) {
super({ foo, bar, baz, ...props });
this.state = { foo, bar, baz };
}
render() {
return <span>Foo: {this.state.foo} Bar: {this.state.bar} Baz: {this.state.baz}</span>
}
}
Здесь я использую деструктурирование в сигнатуре конструктора, чтобы извлечь некоторые реквизиты, которые я хотел бы использовать в состоянии моего компонента. Я гарантирую, что передаю эти значения в super. Однако, когда я на самом деле выполняю аналогичный код, я вижу предупреждение, которое выглядит так:
Предупреждение: MyComponent(...): При вызове super() в
MyComponent
убедитесь, что переданы те же реквизиты, которые были переданы конструктору вашего компонента.
Итак, мой вопрос: можно ли деструктурировать подпись конструктора, как я показал, без соответствующего предупреждения? (Я предполагаю, что предупреждение существует по уважительной причине, и я также уверен, что не полностью понимаю последствия.)
super
- это первое, что вы должны вызвать в функции, но если вы транспилируете с помощью babel, чтобы использовать деструктурирование, он должен выполнитьconst foo = props.foo
и т. д. до супервызова. Вместо этого вы можете сделатьsuper(props)
, а затемconst { foo, bar, baz } = props
после супервызова. - person m0meni   schedule 08.11.2016React
на github: p - person m0meni   schedule 08.11.2016