首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卸载React.js节点

卸载React.js节点
EN

Stack Overflow用户
提问于 2014-02-09 17:07:16
回答 6查看 96.1K关注 0票数 54

我正在尝试用React.js卸载一个this._rootNodeID节点

函数(){ React.unmountComponentAtNode(this._rootNodeID) }

但是它返回false

当我单击一个元素时会触发handleClick,并且应该卸载根节点。关于unmountComponentAtNode 这里的文档

我也试过这个:

React.unmountComponentAtNode($('*data-reactid="'+this._rootNodeID+'"'))

该选择器适用于jQuery.hide(),但不能卸载它,而文档声明它应该是DOMElement,就像用于React.renderComponent的那样。

经过几次测试,结果证明它可以在一些元素/选择器上工作。

它以某种方式与选择器:document.getElementById('maindiv')一起工作,其中maindiv是一个没有用React.js生成的元素,只是普通的html。然后返回true

但是,一旦我尝试选择一个与ElementById一起生成的不同的React.js,它就会返回false。而且它也不适用于document.body,尽管如果我console.log它们的话,它们都会返回相同的东西(getElementsByClassName('bla')[0]也不起作用)

应该有一种通过this选择节点的简单方法,而不必求助于jQuery或其他选择器,我知道它就在那里。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-02-09 20:52:40

从挂载组件所在的DOM元素中卸载组件。如果你做了这样的事情:

代码语言:javascript
复制
ReactDOM.render(<SampleComponent />, document.getElementById('container'));

然后您将用以下方式卸载它:

代码语言:javascript
复制
ReactDOM.unmountComponentAtNode(document.getElementById('container'));

这里是一个简单的JSFiddle,我们在这里挂载组件,然后在3秒后卸载它。

票数 98
EN

Stack Overflow用户

发布于 2014-10-29 21:51:20

这对我有用。如果findDOMNode返回null,您可能需要采取额外的预防措施。

代码语言:javascript
复制
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(this).parentNode);
票数 37
EN

Stack Overflow用户

发布于 2014-06-26 18:45:55

我使用的示例是:

代码语言:javascript
复制
unmount: function() {
  var node = this.getDOMNode();
  React.unmountComponentAtNode(node);
  $(node).remove();
},

handleClick: function() {
  this.unmount();
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21662153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档