#reactjs #api
Вопрос:
Я пытался познакомиться с React. У меня есть два компонента. Вызов API выполняется для родительского компонента, и я пытаюсь передать данные дочернему компоненту.
Это мой родительский компонент:
export default function LandingPage(props) {
const [posts, setPosts] = useState([]);
useEffect(() => {
axios.get("https://jsonplaceholder.typicode.com/posts").then((response) => {
setPosts(response.data);
});
}, []);
const classes = useStyles();
const { ...rest } = props;
return (
<div>
<div className={classNames(classes.main, classes.mainRaised)}>
<div className={classes.container}>
{/* HERE IS THE CHILD COMPONENT BELOW */}
<ProductSection posts={posts} />
</div>
</div>
<Footer />
</div>
);
}
Это мой детский компонент:
export default function ProductSection(props) {
const classes = useStyles();
return (
<div className={classes.section}>
{/* HERE IS THE CONSOLE LOG */}
{console.log(props.posts[0])}
{/* HERE IS THE RENDER */}
<Typography>{props.posts[0]}</Typography>
</div>
);
}
ProductSection.propTypes = {
posts: PropTypes.arrayOf(
PropTypes.shape({
userId: PropTypes.number,
id: PropTypes.number,
title: PropTypes.string,
body: PropTypes.string,
})
),
};
Заранее спасибо, вроде как новичок в этом деле.
Ответ №1:
Данные являются объектами, было бы более понятно, если бы компонент типографии был общим. Хотя я пытался решить эту проблему без типографии и ее работы после добавления условных для несуществующих postData, так как данные будут извлечены и будут ждать обещания служить. Это работает.
App.js -> Родитель
ProductSection.js -> Ребенок
Обратитесь к этой песочнице, которая поможет вам с кодом. Посмотрите эту песочницу, чтобы получить больше ясности:
Комментарии:
1. Спасибо, что теперь у меня есть дисплей, мне было интересно, не могли бы вы, возможно, объяснить немного больше о том, что здесь происходит, я все еще пытаюсь понять это. спасибо вам
2. 2. При выполнении сетевого запроса возникает задержка , т. е. загрузка данных займет некоторое время. Таким образом, react будет отображаться изначально, и он будет ожидать чего-то в своем состоянии. Просто представьте себе концепцию загрузки. Должно быть какое-то состояние загрузки. Поэтому мы установили postData на что-то ложное. Так что мы можем добавить условные и дождаться данных. Когда поступают данные, мы устанавливаем состояние и запоминаем всякий раз, когда мы устанавливаем состояние. React перенаправляет, поэтому он будет заполнять данные сейчас, прежде чем этого не произойдет, потому что его ( сетевой запрос получает axios), который имеет задержку, и изначально react чего-то ожидает.
3. freecodecamp.org/news/fetch-data-react/. … Обратитесь к этому для большей ясности , очень хорошо объясненной здесь
4. 1. React не может визуализировать объект. Это не может быть неявно, но явно, преобразовав его с помощью строки, мы можем. Но зачем визуализировать объект. Мы определенно хотели бы показать его ключи, такие как идентификатор, название или тело. Так, например, дочерний компонент получил объект, который был в вашем коде : props.posts[0]. Таким образом, мы получим доступ к его ключам, потому что react может неявно отображать строку или число . Поэтому мы получаем доступ к его ключам. Итак, проблема рендеринга объекта решена.
Ответ №2:
Я предполагаю, что,вероятно,ваши данные в props.posts[0] являются объектом, поэтому я бы попробовал использовать JSON.stringify(props.posts[0], null, 2).