React无状态组件中的Ajax调用
Ajax call in React stateless component
我有一个react无状态组件,它的内部html是动态的。
所以我试图获得ajax数据并将其设置为html。但它的行为就像普通的HTML(意味着新的HTML包含其他react组件)。
所以,有没有办法从ajax调用中获得html,并将其设置为React无状态组件,并将其编译为React组件?
更多细节根据@Gosha Arinich的要求:
基本上我想使弹出功能。因此,主弹出组件将携带外部结构,页眉和页脚弹出。不同的弹出窗口的内容将设置在其他文件中,我想获得请求文件的ajax并将其设置为HTML到弹出框体。
import React, { PropTypes } from 'react';
function getDataFromFile(filename){
$.get(filename, function (result) {
document.getElementById("content").innerHTML = result;
})
}
const Popup = ({filename}) => {
getDataFromFile(filename);
return (
<div className="popup-container">
<PopupHeader />
<div id="content"></div>
<PopupFooter />
</div>
);
};
// prop validation
Popup.propTypes = {
filename: PropTypes.string.isRequired
};
export default Popup;
不,无状态组件不应该能够动态地改变自己。您可以使用jquery将更改hack到组件中,但不建议这样做,因为由无状态组件呈现的内容只应该是其props
的产物。
最佳实践解决方案是包装它:
var ParentComponent = React.createClass({
getInitialState: function(){ return {html: null}; }
componentWillMount: function(){
// Do ajax call instead of timeout
setTimeout(function(){
this.setState({html: 'abcd'});
}.bind(this))
},
render: function(){
return (
<div>
<OtherReactComponentsHere/>
{this.state.html? <StatelessChild html={this.state.html} /> : <span>Loading...</span>}
</div>
);
}
})
StatelessChild的呈现函数应该是这样的:
render: function(){
return <span dangerouslySetInnerHTML={{__html: this.props.html}}></span>
}
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作