我最近开始在UI项目中使用ReactJS,这大大简化了UI工作流程。真正令人愉快的API。

我最近注意到,我不得不在一些需要在页面上聚合数据的项目中使用一种模式。这些数据将存在于DOM中,而不依赖于使用React状态进行数据转换。

这是一个示例实现:

var Component = module.exports = React.createClass({

  componentDidMount: function() {
    this.component = new Component();
    this.component.start();
  },

  componentWillUnmount: function(prevProps, prevState) {
    if (this.component !== undefined) {
      this.component.destroy();
    }
  },

  render: function() {
    return (
      <div id="componentContainer"></div>
   );
  }

});


var Component = function(){
    // Some object that dynamically loads content in a
    // pre-packaged NON-react component into componentContainer
    // such as a library that renders a graph, or a data loader
    // that aggregates DOM elements using an infinite scroll
}


我的问题是这是否是使用React将数据聚合到DOM中的正确方法。我到处寻找惯用的方法,但是我的google-foo无法提出任何建议。

谢谢!

编辑-作为附带说明,有人认为使用componentWillUnmount销毁容器的方式会有问题吗?

最佳答案

主要问题是您使用的ID不灵活,并且会针对其余组件进行假设(因为ID必须是全局唯一的)。

module.exports = React.createClass({
  componentDidMount: function() {
    // pass a DOM node to the constructor instead of it using an id
    this.component = new Component(this.getDOMNode());
    this.component.start();
  },

  componentWillUnmount: function() {
    this.component.destroy();
  },

  render: function() {
    return <div />;
  }
});


您的componentWillUnmount很好,但是您在其中设置了this.component的位置将始终在componentWillUnmount之前运行,并且没有其他原因将其分配/删除,因此不需要if语句。

同样,两个参数均未使用,也未提供给componentWillUnmount。该签名属于componentDidUpdate

09-19 13:50