我有一个简单的jquery ajax,用于从API中获取内联HTML代码
$.ajax({
url: url,
headers: { 'Accept': 'application/javascript' },
dataType: 'html',
beforeSend: function(){
$('.load-more').slideDownThenFadeIn(100);
}
})
.done(function(data) {
$('#container').append(data);
});
这是一个不是用React构建的简单按钮
<a class="btn load-more" href="javascript:void(0)">Load More</a>
Ajax调用调用API将html代码呈现回服务器......
它渲染回下面的html代码
<div data-react-class=\"My.React.Base.PostButton\" data-react-props=\"{"buttonText":"Contact me","buttonClass":"btn btn-clear btn-block","business":{"id":86055,"business_name":"Buy Plan","mobile_phone":"0412 345 678"},"cta":"card","slideTitle":null,"showPostJobExclusively":true,"showToAll":false,"CallCustomer":false}\"></div>
但反应成分没有呈现......
我实际上期望渲染react组件,但是在附加ajax数据之后会丢失以下内容
<a data-reactroot="" class="btn btn-clear btn-block" href="#"><span><!-- react-text: 3 -->Contact me<!-- /react-text --></span></a>
我在这里错过了什么吗?
编辑:
<div class="card"><div class="col-xs-6 pr8"><div data-react-class="SS.React.Base.ProfileJobPostButton" data-react-props="{"buttonText":"Contact me","buttonClass":"btn btn-clear btn-block","business":{"id":129679,"business_name":"IMC Cleaning Services","mobile_phone":"6197877882"},"cta":"business_directory_card","slideTitle":null,"showPostJobExclusively":true,"showPostJobToAll":false,"showCallBusiness":false}"></div></div>
来自API的React组件如下所示
render() {
return(
<a className={this.props.buttonClass} href="#" onClick={this.handleOnClick}>
{
this.state.loading ?
<My.React.Base.Spinner spinnerColour='white-spinner' />
:
<span>
{this.props.buttonText}
{this.props.withArrow && <i className="ficon-arrow-right-shaft pl10" />}
</span>
}
</a>
)
}
答案 0 :(得分:0)
您使用的是错误的方法。首先,你不应该在反应组件中强制渲染html代码。所以通常API应该返回数据,而html应该是react组件的一部分。
但无论如何,如果你使用这种方法,你应该使用 dangerouslySetInnerHtml 属性的反应参考链接https://facebook.github.io/react/docs/dom-elements.html
这就是修改dom或将html附加到dom节点的反应方式&#39; HTML
您也可以在安装组件后修改组件。因此,如果您在组件安装后进行API调用(通常是这种情况),则可以将html存储在状态中,并使用上述属性dangerouslySetInnerHTML,您可以将其值设置为状态变量。