OMDB API (The Open Movie Database)๋ฅผ ํ์ฉํด ์ํ ๊ฒ์ ์ฌ์ดํธ ๋ง๋ค๋ฉฐ ๋ฐ์ํ ๋ฌธ์ ์ ๊ทธ ํด๊ฒฐ ๊ณผ์ ์ ๊ธฐ๋กํฉ๋๋ค !
API๊ฐ์ผ๋ก ์ํ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ์ค ๋ฐ์ํ ๋ฌธ์ ์ ๋๋ค..
์ํ ์ ๋ชฉ์ ๊ฒ์ํ ๊ฒฝ์ฐ, ๊ฒ์ํ ์ ๋ชฉ์ด ํฌํจ๋ ๋ชจ๋ ์ํ๋ฅผ ์ถ๋ ฅํ๋ ์์
์ ์ํํ๊ณ ์์์ต๋๋ค. ํ์ง๋ง ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋์ง ์์๊ณ , ์ฝ์์ฐฝ์๋ โmovies(์ํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด) is not iterableโ์ด ์ฐํ์ต๋๋ค ๐ข
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋
you have to use Object.keys orย Object.entries, to iterate over the properties or entries of an object.
๋ผ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
์ ๊ฐ ์ดํดํ ๋ฐ๋ก๋ .. 'movies๊ฐ ์ํ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฐ์ฒด์ key๊ฐ ํน์ value๊ฐ์ ํตํด ์ํ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด๋ผ!' ๋ผ๋ ๋ป์ธ ๋ฏ ํ์ฌ .. const movie of Object.values(movies)์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋๋ฐ์
์ด๋ฒ์ TypeError: Cannot convert undefined or null to object๋ผ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์๋์ getMovies ํจ์๋ ๋ฐ๋ก ๋ฌธ์ ์ ๊ทธ ํจ์๋ก API์์ ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ์์ด์ ๋๋ค.
async function getMovies(page = "", title = "", year = "") {
const url = `https://omdbapi.com/?apikey=7035c60c&s=${title}&page=${page}&y=${year}`;
console.log(url);
const res = await fetch(url);
const { Search: movies } = await res.json();
console.log(movies);
return movies;
}
OMDB API ์ฌ์ดํธ๋ฅผ ํ์ธํด๋ณด๋ parameter ์ค title์ ํ์๊ฐ์ผ๋ก ๋ฐ๋์ ํ์ํ ์ธ์๋ผ๋๋ฐ์.. ์ ๋ title์ด ๋น๊ฐ์ด๋ผ ๋ฐฐ์ด์ด ๋ฐ๋ณต๋์ง ์๊ณ undefined๋ฅผ ๊ณ์ ๋ฑ์ด๋ธ ๊ฒ์ด์์ต๋๋ค ์๋
async function getMovies(page = "", title = "frozen", year = "") {
const url = `https://omdbapi.com/?apikey=7035c60c&s=${title}&page=${page}&y=${year}&type=${genre}`;
const res = await fetch(url);
const { Search: movies } = await res.json();
console.log(movies);
return movies;
}
์ ๋ชฉ ๊ฒ์์ ํตํด ์ํ ์ ๋ณด ๋ถ๋ฌ์ค๊ธฐ ๋ฏธ์ ์ ์ํํ ๋ค, ๊ฐ๋ด์ฐ๋๋ก ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ selectํ๊ทธ๋ฅผ ์ถ๊ฐํ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ก 2022๋ ์ํ๋ง ๋ถ๋ฌ์ค๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ฌด์์ธ๊ณ ์ฐพ์๋ณด๋ ..
์ ๋ ์ค์ ํ ์ ์๋ option์ ๊ธฐ๋ณธ๊ฐ์ด 2022๋
์ผ๋ก ์ง์ ๋์ด ์์์ต๋๋ค
//์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ
<option value="">All year</option>
//๋๋ฒ์งธ ๋ฐฉ๋ฒ
<option value="all-year" selected>All year</option>
์ ๋ ์ํ ์ ๋ชฉ์ ๊ฒ์ํ ๋ ๋ชจ๋ ์ฐ๋์ ์ํ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์ด ๋์ด์ผ ํ๋๋ฐ, ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ ๊ฐ์ฅ ์๋จ์ 2022๋ ์ด ๊ธฐ๋ณธ๊ฐ์ด ๋์ด 2022๋ ์ํ๋ง์ ๋ถ๋ฌ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์์ต๋๋ค ..^^
.hidden{
display: none;
}
moreBtn.classList.add('hidden')
/* ์ด์ ์ฝ๋ */
main .actions .more-btn {
display: flex
}
/* ๋ฐ๋ ์ฝ๋ */
.more-btn {
display: flex
}
css ์ ์ฉ์ ๊ฐ์ ์ฐ์ ์์์ ์๋ ๊ฒฝ์ฐ, ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ๋ง์ ๊ฒฝ์ฐ๊ฐ ๋จผ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ถ๋ชจ ์์๋ฅผ ์ง์ฐ๊ณ ํด๋น class๋ง ๋จ๊ฒจ๋์ hidden class๊ฐ ๋ฐ๋ก ์ ์ฉ๋์์ต๋๋ค !
์์ง ๋ชจ๋ฅด๋ ๊ฒ ํฌ์ฑ์ด๋ผ ๊ฐ ๊ธธ์ด ๋ฉ์ง๋ง .. ^^ ํ๋ ๋์ฉ ๋ฌธ์ ์ ์ ์ฐพ์๊ฐ๋ฉฐ ๊นจ๋ฌ์์ ์ป๊ณ ์๋ ์ค์ ๋๋ค .. ์ฌ์ค js ์ด๋ก ๊ฐ์๋ง ๋ฃ๋ค๊ฐ ์ด๋ ๊ฒ ์ง์ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ค๋ ์ด๋ ค์์ด ๋ง์๋๋ฐ์ ใ ๋๋ฆ ์ฌ๋ฏธ๋ ์์ด์ ๋นจ๋ฆฌ ๋๋ ๋ง์ ํ๋ก์ ํธ๋ฅผ ์งํํด ๋ณด๊ณ ์ถ๋ค๋ ์์ฌ์ด ๋ค์ด์ ! ์ด์ฌํ ๊ณต๋ถํ ๊ฒ์ ๋น ์ค