Есть код, который выводит посты и по клику на пост показывает его полное содержимое.
import React from "react";
type respX = {
"id": any,
"userId": any,
"title": any,
"body": any,
}
interface PropsI {
}
interface StateI {
data: respX[];
changedBody: string
changedTitle: string
}
export class ComponentPostList extends React.Component<PropsI, StateI> {
state: StateI = {data: [], changedBody: '', changedTitle: 'Click to choose article'}
async getPostById(id: any) {
const myResponse = await fetch(`https://jsonplaceholder.typicode.com/posts/${id}`);
const myJson = await myResponse.json();
this.setState({changedBody: myJson.body, changedTitle: myJson.title});
}
async componentDidMount() {
const response = await fetch(`https://jsonplaceholder.typicode.com/posts/`);
const json = await response.json();
this.setState({data: json});
}
render() {
return (
<div className="About">
<div className="content">
<div className="title">{this.state.changedTitle}</div>
<div className="article">{this.state.changedBody}</div>
</div>
{this.state.data.map(el => (
<li onClick={e => this.getPostById(el.id)} key={el.id}>
{el.title}
</li>
))}
</div>
);
}
}
Как правильно передать данные из одного компонента в другой? Чтобы рендер заголовков постов был в одном компоненте,а уже полное содержимое поста в другом компоненте. Эти компоненты находятся на одном уровне:
<ComponentPostList data={data} onClick=(getPostById) />
<ComponentArticle post={post} />
Вам необходимо создать родительский компонент, например, Posts
, который будет визуализировать компоненты ComponentPostList
и ComponentArticle
. В компоненте Posts
следует реализовать логику загрузки данных и обработки щелчка по посту. Также в состоянии компонента Posts
должен храниться текущий отображаемый пост (или значение null
, если ничего отображать не надо). Компонент Posts
после загрузки данных должен передавать их дочернему компоненту ComponentPostList
для визуализации. Также из компонента Posts
в компонент ComponentPostList
надо передать функцию обработки щелчков. Кроме того, из компонента Posts
в компонент ComponentArticle
следует передать содержимое отображаемого поста.
Таким образом, код вызова дочерних компонентов из компонента Posts
будет похож на следующий:
<ComponentPostList data={data} onClick={() => this.getPostById} />
<ComponentArticle post={post} />
не углубляясь к код, ответ:
<Context>
. это по сути, такой же подход, как и 1, но более красивее. родитель будет хранить и раздавать своё состояние, а любые дочерние(!) компоненты могут на это состояние подписываться.плюс я заметил, что Вы вешаете обработчики событий на все, созданные Вами <li>
, элементы. вместо этого можно повесить один обработчик на родителя в целях производительности.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я разрабатываю расширения, которые добавляют код js в сторонний сервис и автоматически заполняют форму для клиента
Доброго времени суток изучаю Django пишу форму для заказа такси с сайта мне надо из файла js делать GET и POST запросы к серверу, когда делаю запрос...
Задачу нужно решить следующим образом: нужно с помощью split разделить то что в переменной, потом отнять 45 минут(0:45)от второй части, проблема...
Недавно начал изучать JSне могу понять для чего, зачем, почему и как использовать тип данных Symbol