React Newb ie
Я кодирую в React. Я беру объект JSON данных из GET-запроса к API и пытаюсь передать его как опору в компоненте. Затем я сопоставляю его, чтобы составить список объектов «следа».
Я получаю эту ошибку в консоли: "Предупреждение: сбойный тип пропуска: недопустимая опора trail
типа array
передано TrailItem
, ожидается object
. "
Вот код для моего компонента уровня приложения:
import React, { Component } from "react";
import "./App.css";
import Navbar from "./components/layout/Navbar";
import Trails from "./components/trails/Trails";
import axios from "axios";
class App extends Component {
state = {
trails: {},
};
async componentDidMount() {
const res = await axios.get(
`https://www.hikingproject.com/data/get-trails?lat=35.0844&lon=-106.6504&maxDistance=10&key=${process.env.REACT_APP_HIKING_PROJECT_KEY}`
);
console.log(res.data);
this.setState({ trails: res.data });
}
render() {
return (
<div className='App'>
<Navbar />
<div>
<Trails trails={this.state.trails} />
</div>
</div>
);
}
}
export default App;
Насколько я могу сказать, нет проблема с данными. console.log(res.data);
возвращает объект, поэтому я знаю, что запрос API работает.
Вот код для моего компонента "Trails":
import React, { Component } from "react";
import TrailItem from "./TrailItem";
class Trails extends Component {
render() {
return (
<div style={trailStyle}>
{Object.keys(this.props.trails).map((key) => (
<TrailItem key={key} trail={this.props.trails[key]} />
))}
</div>
);
}
}
const trailStyle = {
display: "grid",
gridTemplateColumns: "repeat(3, 1fr)",
gridGap: "1rem",
};
export default Trails;
Мне кажется, что я не используя правильный синтаксис для входа в объект, а затем дальше в массив "trails", но я в тупике. Спасибо за вашу помощь!
EDIT Вот код "TrailItem":
import React from "react";
import PropTypes from "prop-types";
const TrailItem = ({ trail: { name, location, imgSmall } }) => {
return (
<div className='card text-center'>
<img src={imgSmall} alt='trail' style={{ width: "25%" }} />
<h3>{name}</h3>
<p>{location}</p>
</div>
);
};
TrailItem.propTypes = {
trail: PropTypes.array.isRequired,
};
export default TrailItem;
Я последовал совету одного из комментариев и изменил PropType на массив, и это исправило одно из предупреждений. Но я все еще не могу получить список <TrailItem />
.