【发布时间】:2017-06-11 09:36:39
【问题描述】:
我无法在dangerouslySetInnerHTML 中动态地加载 AJAX 格式的 HTML 格式数据(如下所述)(即,它在 DOM 中设置为相同的字符串而不是编译)。请注意,我正在使用 axios 插件进行 AJAX API 调用。当我尝试在dangerouslySetInnerHTML 中静态提供相同的 HTML 数据时,它运行良好。我不知道那里发生了什么。
[{id: 1, image: "assets/img/news-sm.png", content: "<p>சிறுவனே!</p>"}]
我的 React 组件代码是
import React, { Component, PropTypes } from 'react';
import List from 'material-ui/List/List';
import ListItem from 'material-ui/List/ListItem';
import Divider from 'material-ui/Divider';
import { Media } from 'react-bootstrap';
import { map } from 'lodash';
class NewsList extends Component {
constructor(props) {
super(props);
}
handleListClick(d){
console.log(d);
}
renderLoadingComponent() {
return <ListItem style={{textAlign: 'center'}}>Loading...</ListItem>;
}
renderNothingFoundElement() {
return <ListItem style={{textAlign: 'center'}}>Nothing found</ListItem>;
}
render() {
const { data, loading } = this.props;
return (
<List className="list">
{
map(data, (d, index) =>
React.Children.toArray([
<ListItem className="list-item">
<Media onClick={(ev) => this.handleListClick(d)} className="media-align">
<Media.Left align="middle">
<img width={75} height={56} src={d.image} alt="news-image"/>
</Media.Left>
<Media.Body>
{d.content && <p dangerouslySetInnerHTML={{ __html: d.content }}></p>}
</Media.Body>
</Media>
</ListItem>,
(index + 1) !== data.length ? <Divider /> : ''
])
)
}
{ loading ? this.renderLoadingComponent() : data.length === 0 ? this.renderNothingFoundElement() : '' }
</List>
)
}
}
NewsList.propTypes = {
data: React.PropTypes.array.isRequired
};
export default NewsList;
我正在像这样从另一个组件调用上述组件
import React, { Component, PropTypes } from 'react';
import NewsList from '../components/news-list';
class Home extends Component {
constructor(props) {
super(props);
this.state = { ajaxData: [], ajaxLoading: false }
}
componentDidMount() {
axios.get('/ajaxUrl')
.then(response => this.setState({ajaxData: response.data}))
}
render() {
return (
<NewsList data={this.state.ajaxData} loading={this.state.ajaxLoading} />
)
}
}
有人可以帮我解决这个问题吗?谢谢。
【问题讨论】:
-
没有足够的代码。请展示整个组件,包括获取数据的代码。
-
@RishatMuhametshin 嗨。我已经编辑了帖子。你能看看这个,让我知道我是否应该添加更多?
标签: javascript html reactjs jsx