这就是我正在做的: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
and componentDidUpdate
,定位元素仍然更新!)
我的问题是有多少由此产生的假设是安全的(即,如果我假设这些事情,我的代码会在 React 的未来版本中崩溃吗?):
- React 并不关心 DOM 是否在更新之间移动,只要你把它放回
componentWillUpdate
. - React 事件处理程序仍然可以处理已移动的元素。
- React 会将您要求的任何内联样式与元素上已有的样式合并(即使它没有设置它们。)
- 即使您将该 DOM 移动到文档中的其他位置,React 也会更新它已呈现的 DOM!
最后一个对我来说似乎有些极端和神奇,但如果它成立,则具有一些重大意义。