Это то, что я делаю: jsfiddle
Критический раздел:
position: function() {
var container = $(this.getDOMNode());
this._menu = $(this.refs.menu.getDOMNode());
this._menu.appendTo(document.body).
offset({
top: container.offset().top +
container.outerHeight(),
left: container.offset().left
});
},
restore: function() {
this._menu.appendTo(this.getDOMNode());
},
componentWillUpdate: function() {
this.restore();
},
componentDidUpdate: function() {
this.position();
},
componentDidMount: function() {
this.position();
},
Это прекрасно работает прямо сейчас. Я помещаю содержимое обратно до обновления компонента, предполагая, что React оставляет DOM в покое между обновлениями и не пропустит его. На самом деле, React, похоже, в порядке с движущимся контентом (если я удалю componentWillUpdate
и componentDidUpdate
, позиционируемый элемент все равно обновится!)
Мой вопрос состоит в том, сколько из полученных предположений являются безопасными (то есть, если я предположу эти вещи, мой код сломается в будущей версии React?):
- React не волнует, перемещается ли DOM между обновлениями, если вы поместите его обратно в
componentWillUpdate
. - Обработчики событий React будут по-прежнему работать с перемещенными элементами.
- React объединит любые встроенные стили, которые вы зададите, со стилями, уже имеющимися в элементе (даже если он их не установил).
- React обновит DOM, который он отобразил, даже если вы переместите этот DOM куда-то еще в документе!
Последнее кажется мне несколько экстремальным и волшебным, но оно имеет некоторые важные последствия, если оно имеет место.