Мое приложение выполняет вызов API и превращает каждый элемент массива JSON в компонент React.
Я создал массив этих дочерних компонентов, но они не отображаются.Как я могу заставить их сделать?Должен ли я использовать React.create()
и затем вызывать render()
для каждого?
Каков правильный шаблон дизайна ванильного React для этого?
var apiPosts = [];
class PostsItsContainer extends Component {
constructor(props){
super(props);
this.state = {}
}
componentDidMount(){
let uri = "some_API_endpoint" ;
if(uri){
fetch(uri)
.then(data => data.json())
.then(posts => {
posts.data.children.forEach(post => {
let imgUrl = post.data.hasOwnProperty('preview') ? post.data.preview.images[0].source.url : null;
let postData = [post.data.title, imgUrl, post.data.link];
apiPosts.push(<PostIt link={post.data.url} image={imgUrl} title={post.data.title} />);
});
}).catch(err => console.log(err)) }
}
render() {
return (
<div className="PostsItsContainer">
{apiPosts}
</div>
);
}
}
РЕДАКТИРОВАТЬ:
Я сменил название, потому что оно было довольно общим.И действительно, я спрашивал, почему мой метод был плохой дизайнерской практикой и не дал мне правильных результатов.
@ Jayce444 сказал мне, почему, и @ Supra28 дал хороший ответ.Я публикую здесь комментарий @ Jayce444, чтобы его было легко прочитать:
Вполне возможно сохранить компонент в переменной или массиве, а затем использовать его.Но хранилище / реквизиты должны быть зарезервированы для данных, необходимых для рендеринга, а не для всего готового компонента.Есть несколько причин, две из которых следующие: во-первых, вы будете раздувать состояние / реквизит, делая это, а во-вторых, вы комбинируете функциональность логики и представления.Данные, необходимые для визуализации компонента, и фактический способ его визуализации должны быть слабо связаны, что упрощает обслуживание, изменение и понимание ваших компонентов.Это как разделение HTML и CSS на отдельные файлы, это проще :)