在构造函数或声明中初始化变量

问题描述:

当使用ReactJS和TypeScript时,在构造函数中初始化类变量还是在声明类变量时更好?它工作得很好,无论哪种方式,转换后的javascript看起来都一样。在构造函数或声明中初始化变量

export class MyClass extends React.Component<iProps, {}> { 
     private myName: string = "Hello"; 

     constructor(props: iProps) { 
     super(props); 

     this.myName= "Hello"; 
     } 
} 
+0

这两个对我来说都是错误的,因为道具的意义在于,他们每次渲染都会被传入一次,而不是在第一次构建类时。 –

+0

最初的道具传递给ctor,所以是两种方式都应该工作。这里可能没有对错,但我总是更喜欢在ctor中设置成员值,因为它使代码在我看来更容易理解。 –

+0

@TomFenech - 是的,我删除了问题中的道具。 – Lambert

这是完全一样的,例如:

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; 
}()); 

code in playground

正如你所看到的编译版本是相同的(除了类名)。
所以你可以使用哪一个你觉得更优雅。

至于反应,你可以使用传递给构造函数的道具。
当使用带反应分量的es6样式类时,您的初始状态将在构造函数中分配,而不是使用getInitialState方法。
如果你的初始状态是道具的函数,那么你需要在构造函数中使用它们。