这就是我在做的事:http://jsfiddle.net/iamnoah/pTrrw/
关键部分是:
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将合并您要求的任何内联样式与元素上已有的样式(即使它没有设置它们.)
即使您将DOM移动到文档中的其他位置,React也会更新它呈现的DOM!
对我来说,最后一个看起来有点极端和神奇,但如果它成立,它会有一些很大的影响.