未呈现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;
不幸的是,这种成分是不是呈现在所有这一页。 我的代码有问题吗?
答
我不认为这个片段$(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;
只有AjaxReq不显示?还有,是否有任何控制台错误? – phpcoderx
是的,只有这一个不显示。没有控制台错误。 – octavian
如果您使用jQuery来更新DOM,那么您错过了React的要点。从你的ajax响应中更新'state'并让React用新类重新渲染。 – Mathletics