2016-09-21 3 views
2

При использовании 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

ответ

1

Это точно так же, к примеру:

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.
Если ваше начальное состояние является функцией реквизита, вам нужно будет использовать его в конструкторе.

Смежные вопросы