【发布时间】:2016-07-05 07:52:55
【问题描述】:
所以我们在这里,使用 Meteor 和 ReactJS 进行创新。这就是我所做的:
- 复制了我的
client/lib/js/文件夹中的 mmenu jQuery 插件。 - 创建了一个名为
Menu的组件,该组件在componentDidMount方法中具有 mmenu 插件初始化。 -
将 React
Menu放置在我的Layout组件中,因此当检查时 React 树在 Chrome 中的外观如下:<Layout> <Menu user={this.data.user} /> <Home /> </Layout>
问题是,当Menu 组件呈现时,mmenu 插件移动 相应的 DOM(nav 元素)超出了 React 范围(就在下面body 标记),因此当 user 对象(作为道具传递)发生更改时,React 在尝试重新渲染该不存在的组件时会感到困惑。
Menu 组件如下所示:
Menu = React.createClass({
componentDidMount(){
const menu = $(this.refs['mmenu']);
menu.mmenu({ /* some options here */ });
}
render(){
<nav id="menu" ref="mmenu">
{ this.props.user ? <HomePublic/> : <HomePrivate/> }
</nav>
}
});
如您所见,在调用menu.mmenu() 函数时,插件移动 nav 元素到主体,如下所示:
<body>
<nav ...> </nav>
<div id="react-root"> ... </div>
</body>
所以我的问题是:有没有办法做到这一点,以便 React 可以重新渲染组件而不会出错?
【问题讨论】:
标签: jquery meteor reactjs mmenu