Ответ 1
Ответ на этот вопрос - использовать ref, как описано в Refs to Components.
Основная проблема заключается в том, что DOM node (и его родительский DOM node) необходим для правильной позиции элемента, но он недоступен только после первого рендеринга. Из статьи, приведенной выше:
Выполнение измерений DOM почти всегда требует обращения к "родному" компоненту и доступа к его базовому DOM node с помощью ссылки. Refs - один из единственных практических способов сделать это надежно.
Вот решение:
getInitialState() {
return {
styles: {
top: 0,
left: 0
}
};
},
componentDidMount() {
this.setState({
styles: {
top: computeTopWith(this.refs.child),
left: computeLeftWith(this.refs.child)
}
})
},
render() {
return <div ref="child" style={this.state.styles}>Child</div>;
}
Это будет правильно позиционировать элемент сразу после первого рендеринга. Если вам также необходимо переместить элемент после изменения в реквизиты, сделайте изменение состояния в componentWillReceiveProps(nextProps)
.