#javascript #reactjs #api #themoviedb-api
#javascript #reactjs #API #themoviedb-api
Вопрос:
я борюсь с приложением react с помощью movie API (https://developers.themoviedb.org ) хахаха. У меня есть компонент списка с карточками фильмов и ТВ. Я отображаю состояние списка и помещаю информацию в свои карточки (идентификатор, заголовок и плакат). Когда я нажимаю на свою карточку, на сайте должна отображаться информация о фильме. Итак, у меня есть другой компонент с именем movies.jsx, и там у меня есть еще три компонента: hero.jsx (который содержит изображение из фильма), menuHero.jsx (меню) и movieInfo.jsx (который содержит заголовок, небольшое отступление от фильма и blabla). Мне нужно заполнить эти три компонента информацией API. Мой компонент movies.jsx показывает мне идентификатор (я помещаю его в < h2>, просто чтобы посмотреть, работает ли он), но я не нахожу способа передать им информацию API для моих еще трех дочерних компонентов.
Кроме того, movieData пуст. Итак, я не знаю, что я делаю не так.
Вот мой код:
const Movies = props => {
const [movieData, setMovieData] = useState([]);
const { match } = props;
const movieId = match.params.id;
useEffect(() => {
axios.get(`https://api.themoviedb.org/3/movie/${movieId}?api_key=${api-key}`)
.then(res => {
setMovieData(res.data);
console.log(movieData)
}).catch(error => console.log(error))
}, []);
return(
<div className="container-section">
<h2>{match.params.id}</h2>
<Hero />
<MenuHero />
<MovieInfo />
</div>
)
}
export default Movies;
enter code here
Ответ №1:
Вы можете передать эти данные в качестве реквизита:
return movieData amp;amp; (
<div className="container-section">
<h2>{match.params.id}</h2>
<Hero movieData={movieData} />
<MenuHero movieData={movieData} />
<MovieInfo movieData={movieData} />
</div>
)
Дополнительная информация:https://reactjs.org/docs/components-and-props.html
Комментарии:
1. Да, но movieData пуста. Я не получаю информацию о фильме. Я не верю, что это неправильный маршрут, потому что < h2> показывает мне идентификатор, и он тот же. Итак, я не знаю, почему состояние не работает
Ответ №2:
Вам нужно получить ключ API и идентификатор фильма из themoviedb, $ {MovieID} $ {api-key} должен быть вашим ключом, который должен храниться как переменная среды. (.env) файл и для доступа к этому ключу вам нужно использовать process.env.(ИМЯ_ПЕРЕМЕННОЙ), чтобы получить желаемое значение. Вот почему вы не получаете никаких данных из своих запросов get.
Комментарии:
1. У меня есть ключ API, написанный в my movies.jsx, я просто вставил этот $ {api-key}, чтобы не делиться своим личным ключом api.