我有一个扩展React.Component
的ES6类,即一个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(...):在
MyComponent
中调用super()时,make 一定要传递组件构造函数所用的相同道具 过去了。
所以我的问题是,是否有可能像我在没有相关警告的情况下显示构造函数的签名? (我假设警告是有充分理由的,我同样确定我不完全理解其含义。)
答案 0 :(得分:5)
If you look at this line in the React source code,您会看到它会进行浅层检查以查看道具对象是否匹配。
// other stuff
var propsMutated = inst.props !== publicProps;
// other stuff
warning(
inst.props === undefined || !propsMutated,
'%s(...): When calling super() in `%s`, make sure to pass ' +
'up the same props that your component\'s constructor was passed.',
componentName, componentName
);
当你将道具传递给super时,你创建了道具的克隆,因此它会引发警告。