#reactjs #react-hooks #jsx
#reactjs #реагирующие крючки #jsx
Вопрос:
привет, ребята, я получаю сообщение об ошибке типа не могу прочитать свойство, не знаю, где я ошибаюсь, пожалуйста, попробуйте решить мою ошибку или скажите мне, что мне делать?
People.js
Это мой people.js файл, в котором я хочу показать информацию о людях
import React from 'react'
const People = (props) => {
const {people} = props;
return (
<div className='row'>
{
people.map((peple)=>{
<div className='col-md-3'>
<div className='card'>
<div className='card-body'>
<h4>{peple}</h4>
</div>
</div>
</div>
})
}
</div>
)
}
export default People;
Star.js
Я пытаюсь получить эту звезду people в моем компоненте people, чтобы показать данные о людях, кто-нибудь может помочь, как я могу это сделать
import React, { useState, useEffect } from 'react';
import './Star.css';
const Star = () => {
const [search, setSearch] = useState('');
const [people, setPeople] = useState([]);
const [planet, setPlanet] = useState([]);
const onSubmit = (e) => {
e.preventDefault();
}
useEffect(() => {
async function fetchPeople() {
let result = await fetch("https://swapi.dev/api/people/?format=json");
let data = await result.json();
setPeople(data.results);
}
async function fetchPlanet() {
let result = await fetch("https://swapi.dev/api/planets/?format=json");
let data = await result.json();
setPlanet(data.results);
}
fetchPeople();
fetchPlanet();
}, [])
// console.log("people", people);
// console.log("planet", planet);
return (
<div>
<div className='container'>
<h2>Star War</h2>
<div className='jumbotron'>
<input type="text"
className="form-control"
placeholder='Search...'
value={search}
onChange={(e) => setSearch(e.target.value)} />amp;nbsp;amp;nbsp;
<span><button className='btn btn-secondary' onClick={onSubmit}>Search</button></span>
</div>
</div>
</div>
)
}
export default Star;
Комментарии:
1. Вы уверены, что правильно переходите
props
к этому компоненту? Проблема в том, что вашаpeople
константа равнаundefined
, а это значит, что у вас, вероятно, нет этого свойства внутриprops
object .2. добавьте журнал консоли после const и посмотрите, правильно ли он отображает данные. const {people} = props; console.log(люди);
3. да, я правильно передаю реквизиты
4. спасибо, сэр, за помощь, я постараюсь исправить свою ошибку
5. не могли бы вы поделиться выводом консоли?
Ответ №1:
Для вашего случая подойдет простая проверка:
(people amp;amp; people.length > 0) amp;amp; people.map(...)
Причина в том, что people
is undefined при первом рендеринге из-за эффекта useEffect не будет выполняться немедленно.
Ответ №2:
<People people={['Jon', 'Paul']} />
Вы ничего не возвращаете в people.map()
Измените его на:
import React from 'react';
const People = (props) => {
const { people } = props;
return (
<div className="row">
{people.map((peple) => (
<div className="col-md-3">
<div className="card">
<div className="card-body">
<h4>{peple}</h4>
</div>
</div>
</div>
))}
</div>
);
};
export default People;
Обратите внимание, что я удалил пару фигурных скобок.
В качестве альтернативы вы можете использовать явный возврат следующим образом:
import React from 'react';
const People = (props) => {
const { people } = props;
return (
<div className="row">
{people.map((peple) => {
return (
<div className="col-md-3">
<div className="card">
<div className="card-body">
<h4>{peple}</h4>
</div>
</div>
</div>
);
})}
</div>
);
};
export default People;