在构造函数或声明中初始化变量
问题描述:
当使用ReactJS和TypeScript时,在构造函数中初始化类变量还是在声明类变量时更好?它工作得很好,无论哪种方式,转换后的javascript看起来都一样。在构造函数或声明中初始化变量
export class MyClass extends React.Component<iProps, {}> {
private myName: string = "Hello";
constructor(props: iProps) {
super(props);
this.myName= "Hello";
}
}
答
这是完全一样的,例如:
class MyClass1 {
private myName: string = "Hello";
}
编译为:
var MyClass1 = (function() {
function MyClass1() {
this.myName = "Hello";
}
return MyClass1;
}());
和:
class MyClass2 {
private myName: string;
constructor() {
this.myName = "Hello";
}
}
编译为:
var MyClass2 = (function() {
function MyClass2() {
this.myName = "Hello";
}
return MyClass2;
}());
正如你所看到的编译版本是相同的(除了类名)。
所以你可以使用哪一个你觉得更优雅。
至于反应,你可以使用传递给构造函数的道具。
当使用带反应分量的es6样式类时,您的初始状态将在构造函数中分配,而不是使用getInitialState
方法。
如果你的初始状态是道具的函数,那么你需要在构造函数中使用它们。
这两个对我来说都是错误的,因为道具的意义在于,他们每次渲染都会被传入一次,而不是在第一次构建类时。 –
最初的道具传递给ctor,所以是两种方式都应该工作。这里可能没有对错,但我总是更喜欢在ctor中设置成员值,因为它使代码在我看来更容易理解。 –
@TomFenech - 是的,我删除了问题中的道具。 – Lambert