未呈现React组件

问题描述:

我有一个名为App.js的文件,这是我的应用程序的主要组件。未呈现React组件

我放在一个新的组件由该文件的render方法返回的结果:

return (
    <div> 
     <AjaxReq /> 
     //many other components 
    </div> 
); 

哪里AjaxReq是下面的方法:

'use strict'; 

var AjaxReq = React.createClass({ 

    loadDoc: function() { 
     $.ajax({ 
      url: "someUrl", 
      context: document.body, 
      success: function(){ 
       $(this).addClass("done"); 
      } 
     }); 
    }, 

    render: function() { 
     return (<div> 
      <p onClick={this.loadDoc}> 
       Click this to make AJAX request. 
      </p> 
     </div>); 
    } 

}); 


module.exports = AjaxReq; 

不幸的是,这种成分是不是呈现在所有这一页。 我的代码有问题吗?

+0

只有AjaxReq不显示?还有,是否有任何控制台错误? – phpcoderx

+0

是的,只有这一个不显示。没有控制台错误。 – octavian

+0

如果您使用jQuery来更新DOM,那么您错过了React的要点。从你的ajax响应中更新'state'并让React用新类重新渲染。 – Mathletics

我不认为这个片段$(this).addClass("done");做你可能打算做的。
在这种情况下,this是指React组件(虚拟DOM),而不是DOM中的实际元素。

在React之外访问React组件实例的唯一方法是存储返回值ReactDOM.render

另外,有没有机会忘记将React(var React = require('react'))导入AjaxReq模块?

就像phpcoderx说的,没有导入React可能会导致没有任何呈现。要像你正在尝试的那样添加CSS类,你会想要做更像下面的事情(尽管我不认为这会影响你所看到的初始渲染问题的缺乏)。

'use strict'; 

var AjaxReq = React.createClass({ 
    loadDoc: function() { 
     $.ajax({ 
      url: "someUrl", 
      context: document.body, 
      success: function(){ 
       this.setState({ isLoaded: true }); 
      } 
     }); 
    }, 

    getInitialState: function() { 
     return { isLoaded: false }; 
    }, 

    render: function() { 
     var classname = this.state.isLoaded ? 'done' : ''; 

     return (<div className={classname}> 
      <p onClick={this.loadDoc}> 
       Click this to make AJAX request. 
      </p> 
     </div>); 
    }; 
}); 

module.exports = AjaxReq; 
+0

不导入React不是问题,因为我在构建过程中解决了这个问题。你为什么在这里设置状态?如果我复制粘贴代码,我会得到'Uncaught TypeError:无法读取'null'属性'isLoaded'。 – octavian

+0

我在AJAX调用中设置状态,作为跟踪何时加载的任何东西(避免直接使用jQuery来操作任何东西)。我不确定你的具体用例是什么,但是我会编辑我的帖子以添加'getInitialState' - 它应该解决你的问题。 – Donald