getInitialState
вызывается при первом экземпляре компонента. Он должен всегда возвращать объект, и этот объект будет начальным состоянием this.state
внутри компонента. Вам не нужно определять getInitialState
, если вы этого не хотите, возможно, вам не нужно внутреннее состояние, и в этом случае вы не определяете его.
componentDidMount
вызывается, когда компонент фактически установлен на DOM. Но нет, как вы сказали, каждый раз, когда компонент визуализируется. Если вы ищете что-то, что запускается каждый раз, когда компонент отображается (кроме render
), посмотрите на componentWillUpdate и/или componentDidUpdate.
Что касается основных отличий, то getInitialState
вполне буквально должен возвращать исходное состояние для этого компонента, ничего больше. Функция выполняется задолго до того, как компонент фактически будет передан в DOM. componentDidMount
выполняется непосредственно после того, как компонент был передан в DOM, поэтому, например, теперь вы можете выполнять действия, требующие, чтобы компонент был в DOM в первую очередь, например, с помощью this.getDOMNode()
для проверки точной высоты корневого элемента HTML вашего компонента или изменяя его положение прокрутки.
Вы правы, хотя оба они будут вызываться только один раз в жизни экземпляра вашего компонента React.