반응형
필요한 정보를 얻기 위해 두 개의 가져오기 요청을 결합하려면 어떻게 해야 하는가?
나는 영화에 대한 정보가 있는 사이트를 쓰고 있다.나는 장르를 파악해야 한다.하지만 문제는 이것이다.모든 주요 정보가 위치한 요청서에는 id로 장르가 표시된다.이 아이디와 장르 이름이 있는 곳에 또 다른 요청을 해야겠어.부에 컴포넌트에서, 나는 루프를 만들었다.그것과 함께 장르 외에 기본적인 정보를 보여준다.어떻게 하면 두 가지 질문을 조합할 수 있을까?
내 코드:
movies.js
export default {
actions: {
async getPopularFilms({ commit }) {
const res_movies = await fetch(
'https://api.themoviedb.org/3/movie/popular?api_key=d502a3d84eb533756ec099ef127a2acd&language=en-US&page=1'
);
const { results } = await res_movies.json();
commit('updateFilms', results);
// Fetch genres
const res_genres = await fetch(
'https://api.themoviedb.org/3/genre/movie/list?api_key=d502a3d84eb533756ec099ef127a2acd&language=en-US'
);
const { genres } = await res_genres.json();
let ids = [];
let genres_ids = [];
for (let id = 0; id < results.length; id++) {
ids.push(results[id].genre_ids);
}
for (let id = 0; id < genres.length; id++) {
genres_ids.push(genres[id]);
}
console.log(ids);
console.log(genres_ids);
},
},
mutations: {
updateFilms(state, films) {
state.popular = films;
},
updateGenres(state, genres) {
state.genres = genres;
},
},
state: {
popular: [],
genres: [],
},
getters: {
returnFilms(state) {
return state.popular;
},
returnGenres(state) {
return state.genres;
},
},
};
PopulMovies.부에를 하다
<template>
<div class="container mx-auto px-4 pt-8">
<div class="popular-movies">
<h2
class="uppercase tracking-wider text-lg text-orange-500 font-semibold"
>
Popular movies
</h2>
<div
class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4"
>
<div v-for="movies in returnFilms" :key="movies.id" class="mt-8">
<img
:src="'https://image.tmdb.org/t/p/w200' + movies.poster_path"
alt="poster"
class="hover:opacity-75 transition ease-in-out duration-150"
/>
<div class="mt-2">
<p class="text-lg mt-2 hover:text-gray-300">{{ movies.title }}</p>
<div class="flex items-center mt1 text-sm text-gray-400">
<svg class="fill-current text-orange-500 w-4" viewBox="0 0 24 24">
<g data-name="Layer 2">
<path
d="M17.56 21a1 1 0 01-.46-.11L12 18.22l-5.1 2.67a1 1 0 01-1.45-1.06l1-5.63-4.12-4a1 1 0 01-.25-1 1 1 0 01.81-.68l5.7-.83 2.51-5.13a1 1 0 011.8 0l2.54 5.12 5.7.83a1 1 0 01.81.68 1 1 0 01-.25 1l-4.12 4 1 5.63a1 1 0 01-.4 1 1 1 0 01-.62.18z"
data-name="star"
></path>
</g>
</svg>
<span class="ml-1">{{ movies.vote_average * 10 }}%</span>
<span class="mx-2">|</span>
<span>{{ movies.release_date }}</span>
</div>
<div class="text-gray-300 text-sm">aaa</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex';
export default {
name: 'Popular Movies',
computed: {
...mapGetters(['returnFilms']),
},
methods: {
...mapActions(['getPopularFilms']),
},
async mounted() {
this.getPopularFilms();
},
};
</script>
<style lang="scss">
.text-orange-500 {
color: #ed8936;
}
</style>
스크린샷
장르Ids를 이름으로 변환하고 싶다고 가정할 경우 결과 내에서.
이거 먹어봐.불행히도 나는 그것을 시험할 수 없다.모바일을 하고 있다.
async getPopularFilms({ commit }) {
const res_movies = await fetch(
'https://api.themoviedb.org/3/movie/popular?api_key=d502a3d84eb533756ec099ef127a2acd&language=en-US&page=1'
);
const { results } = await res_movies.json();
commit('updateFilms', results);
// Fetch genres
const res_genres = await fetch(
'https://api.themoviedb.org/3/genre/movie/list?api_key=d502a3d84eb533756ec099ef127a2acd&language=en-US'
);
const { genres } = await res_genres.json();
const filmsWithGenres = results.map( ({genre_ids, ...rest}) => ({...rest, genre_ids: genre_ids.map(id => genres.find(genre => genre.id === id).name )}) )
console.log(filmsWithGenres);
},
반응형
'Programing' 카테고리의 다른 글
VueJS에서 v-for 지시문을 사용하여 여러 루트 요소를 렌더링하는 방법 (0) | 2022.04.12 |
---|---|
Vue 3에서 Vuex 4로 데이터를 설정하지 않음 (0) | 2022.04.12 |
jest.fnmus는 부르지 않았다고 주장하지만, 지금까지. (0) | 2022.04.12 |
vue.js가 노드를 제거할 때 gridstack.js가 내 요소를 스와핑하는 이유 (0) | 2022.04.12 |
특정 인덱스에서 v-for 루프를 시작하는 방법 (0) | 2022.04.12 |