我有以下组件:
import React from 'react';
import './articles_list.css';
export default class ArticlesList extends React.Component {
constructor(props) {
super(props);
this.state = {
articles: null
}
}
componentWillMount() {
fetch('/articles_all')
.then(res => res.json())
.then(json => {
this.setState({
articles: json.articles
});
});
}
render() {
var teste = () => {
if (this.state.articles === null) {
return(<div>No articles</div>)
} else {
{this.state.articles.forEach( function(element, index) {
console.log(element);
return <div key={index}>{element.title}</div>;
})}
}
}
return(
<div className="articles_list">
<div className="articles_list_title">
ARTICLES
</div>
<div>{teste()}</div>
</div>
);
}
}
虽然JSON请求工作正常并返回一个包含五个JSON对象的数组,但它们只是不渲染!
我是ReactJS的新手并阅读(并观看)了很多教程,但似乎我遗漏了一些东西。
有什么建议吗?
答案 0 :(得分:1)
您可以尝试这样的事情。
import _ from 'lodash';
renderArticles() {
return _.map(this.state.articles, article => {
return (
<li className="list-group-item" key={article.id}>
{article.title}
</li>
);
});
}
render() {
return (
<div>
<h3>Articles</h3>
<ul className="list-group">
{this.renderArticles()}
</ul>
</div>
);
}
映射列表并逐个渲染。在这里,我使用lodash map helper来完成这项工作。希望这可以帮助。快乐的编码。
答案 1 :(得分:1)
return语句不会返回该值,而是像continue
语句一样,需要使用map
var teste = () => {
if (this.state.articles === null) {
return(<div>No articles</div>)
} else {
{this.state.articles.map( function(element, index) {
console.log(element);
return <div key={index}>{element.title}</div>;
})}
}
}
否则,如果您想使用forEach,则需要修改代码,如
render() {
var teste = []
if (this.state.articles === null) {
teste.push(<div>No articles</div>)
} else {
{this.state.articles.forEach( function(element, index) {
console.log(element);
teste.push( <div key={index}>{element.title}</div>);
})}
}
}
return(
<div className="articles_list">
<div className="articles_list_title">
ARTICLES
</div>
<div>{teste}</div>
</div>
);
}