Javascript 我如何才能对替换(而不是合并)VDOM做出反应?
我有一个组件,在Javascript 我如何才能对替换(而不是合并)VDOM做出反应?,javascript,reactjs,Javascript,Reactjs,我有一个组件,在componentDidMount中,它为jQuery插件提供了对React呈现的DOM的一些控制。我知道每个人都说“除了React,别让任何东西碰DOM”,但请听我说,因为重新发明这个插件现在是不可行的,我认为React应该有一个“覆盖在DOM中找到的任何东西”开关,我希望有人能指给我 更多信息:我设计它是为了让React的DOM状态完全由React提供的道具决定,除非用户在拖拽东西。一旦删除,我不关心自上次React更新以来DOM如何更改,我只想呈现React当前道具的所有内
componentDidMount
中,它为jQuery插件提供了对React呈现的DOM的一些控制。我知道每个人都说“除了React,别让任何东西碰DOM”,但请听我说,因为重新发明这个插件现在是不可行的,我认为React应该有一个“覆盖在DOM中找到的任何东西”开关,我希望有人能指给我
更多信息:我设计它是为了让React的DOM状态完全由React提供的道具决定,除非用户在拖拽东西。一旦删除,我不关心自上次React更新以来DOM如何更改,我只想呈现React当前道具的所有内容,我将通过ReactDOM.render将其传递给插件的change
处理程序
症状是插件在拖动期间和之后创建的节点在React被告知更新后不会消失
是,节点最初是键
-ed
插件是可嵌套的,它增加了交互性(树的拖放重新排序),JSBin在这里:
我真的在找“发现什么就杀什么”的场景。我以为调用ReactDOM.render
就可以了,但显然不行。当然,这两种情况都不是手术式的,但我没想到它会这样。提前感谢所有“您做错了”的建议和其他修复方法在componentDidMount
中手动添加div
元素,并在componentdiddupdate
中用新元素替换它:
class Foo extends React.Component {
render() {
// whatever HTML you want...
return (
<div>
<div>
{/* this div will contain our non-React stuff that we need to reset */}
<div ref="container"></div>
</div>
</div>);
}
blastAndRecreate() {
// throw away any content within the container and replace it with brand new content
const container = $(this.refs.container).empty();
const newDIV = $("<div>").appendTo(container);
// give this new DIV to nestable plugin
newDIV.nestable(...);
}
componentDidMount() {
this.blastAndRecreate();
}
componentDidUpdate() {
this.blastAndRecreate();
}
}
类Foo扩展了React.Component{
render(){
//无论你想要什么HTML。。。
返回(
{/*这个div将包含我们需要重置的非React内容*/}
);
}
blastAndRecreate(){
//扔掉容器内的任何内容,并用全新内容替换
const container=$(this.refs.container).empty();
const newDIV=$(“”)。appendTo(容器);
//将此新DIV指定给nestable插件
newDIV.nestable(…);
}
componentDidMount(){
这个.blastAndRecreate();
}
componentDidUpdate(){
这个.blastAndRecreate();
}
}
您是否可能走错了方向?我并不是想成为一个混蛋,我只是想知道,如果你的应用程序如此依赖jQuery插件,为什么还要使用React。我相信你有理由,但我想我真的应该回到这里。我知道这不能马上帮到你。托德,谢谢。我的目标是在这个JQuery插件上创建一个干净的React包装器,这样它就可以与系统的其余部分组成。但是,也许需要进行一次完整的迁移?也许,如果目标是查看React的性能优势,那么这个项目不会真正显示这一点,因为您的应用程序的状态是由jQuery插件管理的。React实际上只是渲染(可能有点慢)结果,它没有使用它的内部diff算法。我明白了,那么您希望能够将这个jQuery插件作为一个组件包含在更广泛的React系统中吗?我认为这可能不是一个简单的解决办法,完全迁移可能是唯一的方法,但也许可以暂时尝试下面的答案。unmountComponentAtNode
不是更惯用一点吗?我的意思是-既然我们已经在JQuery领域了,再多一点也不会有什么坏处,但是我遇到了一些错误,比如Uncaught Error:invalition:processUpdates():找不到元素的子元素0。这可能意味着DOM意外地发生了变异(例如,通过浏览器)
试图进一步变异DOM-您对此有何看法?您应该编辑您的帖子以包含一些相关的代码谢谢@Brandon-当empty()
遇到麻烦时,我使用了组件卸载。以下是我如何度过这段时间的完整记录: