gpt4 book ai didi

javascript - reactjs 和呈现纯 HTML

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:54 25 4
gpt4 key购买 nike

首先,我对 React 完全陌生,所以我不确定我的代码是否已经按照“React 方式”编写。

到目前为止,我已经创建了几个呈现 Bootstrap 模态的 react 类。为了设置初始状态,我在 componentsDidMount 函数中调用了一个 Ajax 函数。在我尝试将纯 HTML 插入模态主体之前,这一切正常。

服务器请求工作正常,我在 this.state.data.content 中得到纯 HTML 代码,但如果我尝试将其插入模态主体,我会收到以下错误:

Error: Invariant Violation: Objects are not valid as a React child (found: object with keys {__html}). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons.

有人知道怎么解决吗?我在这里做的事情是否正确?

谢谢!

<script type="text/babel">

var Modal = ReactBootstrap.Modal;
var Button = ReactBootstrap.Button;
var ButtonToolbar = ReactBootstrap.ButtonToolbar;


var L5fmHeaderButton = React.createClass({

render: function() {
var iconClass = "glyphicon " + this.props.buttonIcon;
return(
<button onClick={this.props.onClick} className="lfm-Modal-Button">
<span className={iconClass} aria-hidden="true"></span>&nbsp;
{this.props.buttonText}
</button>
);
}
});

var L5fmModalBody = React.createClass({

rawMarkup: function() {
return { __html: this.props.content };
},

render: function() {

return(
<Modal.Body>
dangerouslySetInnerHTML={this.rawMarkup()}
</Modal.Body>
);
}

});

var L5fmModal = React.createClass({

getInitialState : function() {
return {
data : []
};
},

componentDidMount: function() {
$.ajax({
url: 'L5fm/setInitialState',
dataType: 'json',
cache: false,
success: function(data) {
this.setState({data: data});
console.log(data);
console.log(this.state.data);
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},

changeDirectory : function() {
if (this.state.privateDir) {
this.setState({privateDir: false});
}
else {
this.setState({privateDir: true});
}
},

render: function() {

if(this.state.data.privateDir) {
var browseIcon = "glyphicon-folder-open";
var browseText = "browse all files";
}
else {
var browseIcon = "glyphicon-briefcase";
var browseText = "browse private files";
}

return(

<Modal {...this.props} bsSize="large" aria-labelledby="contained-modal-title-lg">
<Modal.Header closeButton>
<div className="header-button-group">
<L5fmHeaderButton buttonIcon="glyphicon-cloud-upload" buttonText="upload" />
<L5fmHeaderButton buttonIcon="glyphicon-list" buttonText="list View" />
<L5fmHeaderButton onClick={this.changeDirectory} buttonIcon={browseIcon} buttonText={browseText} />
</div>
</Modal.Header>
<L5fmModalBody content={this.state.data.content}/>
</Modal>
);
}

});


var App = React.createClass({
getInitialState: function() {
return { lgShow: false };
},
render: function() {
let lgClose = () => this.setState({ lgShow: false });

return (
<ButtonToolbar>
<Button bsStyle="primary" onClick={()=>this.setState({ lgShow: true })}>
Launch large demo modal
</Button>

<L5fmModal show={this.state.lgShow} onHide={lgClose} />
</ButtonToolbar>
);
}
});

ReactDOM.render(<App />, document.getElementById("modal"));

</script>

最佳答案

好吧,看起来,您缺少一个 div-tag您希望在何处呈现原始 html

考虑像这样更改 Modal.Body 代码

var L5fmModalBody = React.createClass({
rawMarkup: function() {
return { __html: this.props.content };
},
render: function() {
return(
<Modal.Body>
<div dangerouslySetInnerHTML={createMarkup()} />
</Modal.Body>
);
}
});

否则渲染会被破坏,因为您的标记不能真正设置为 Modal.Body 上的子标记元素

关于javascript - reactjs 和呈现纯 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34512794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com