

const handleSearch = () => {
localStorage.setItem("keyword", keyword.value);
let str = keyword.value.toLowerCase();
str = str.trim();
if (keyword.value) store.getAllMovies(str);
};
<template>
<main>
<IsLoading v-if="moviesStore.isLoading" />
<article class="lg:flex lg:gap-5 lg:justify-between lg:items-center">
<div
class="w-full h-64 rounded-md overflow-hidden md:h-80 lg:w-6/12 lg:h-96"
>
<img
:src="moviesStore.movie.Poster"
class="w-full h-full object-cover"
:alt="moviesStore.movie.Title"
/>
</div>
<div class="my-5 lg:w-5/12 lg:mt-0">
<p
class="
text-gray-400
font-light
text-xs
mt-2
tracking-wider
md:text-sm
"
>
{{ moviesStore.movie.Genre }}
</p>
<h3
class="
my-8
font-medium
text-lg text-gray-200
tracking-wider
md:text-2xl
"
>
{{ moviesStore.movie.Title }}
</h3>
<div
class="
flex
justify-between
items-center
flex-wrap
gap-2
md:justify-start md:gap-14
"
>
<div class="flex items-center text-gray-400 font-light text-sm">
<CalendarIcon />
{{ moviesStore.movie.Released }}
</div>
<div class="flex items-center text-gray-400 font-light text-sm">
<TimeIcon />
{{ moviesStore.movie.Runtime }}
</div>
<div class="flex items-center text-gray-400 font-light text-sm">
<LocationIcon />
{{ moviesStore.movie.Country }}
</div>
</div>
<div class="flex items-center text-gray-400 font-light text-sm my-8">
<StarIcon />
{{ moviesStore.movie.imdbRating }} -
{{ moviesStore.movie.imdbVotes }} Votes
</div>
<p
class="
text-gray-300 text-justify
tracking-wider
text-sm
font-light
md:tracking-widest
"
>
{{ moviesStore.movie.Plot }}
</p>
</div>
</article>
</main>
</template>
//const API_END_POINT = process.env.VUE_APP_API_END_POINT;
//const API_KEY = process.env.VUE_APP_API_KEY;
vue๋ ์ฒ์ ์ ํด๋ณด๋ ๊ฑฐ๋ผ์ ๋ง์ด ๋ฏ์ค์๋๋ฐ ๊ทธ๋ ๋ค๋ณด๋ vue๋ฅผ ์ ๋๋ก ๋ค๋ฃจ์ง ๋ชปํ ์ฑ ๊ณผ์ ๋ฅผ ์งํํ๊ธฐ์ ๋ง์ด ๊ธ๊ธํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ ๋ค๋ณด๋ vue์ ์นํด์ง๊ธฐ ์ํ ์๊ฐ์ด ๋ ํ์ํ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ์๋ ์ํ api๋ฅผ ๊ฐ์ง๊ณ ์ ์์ ํด๋ดค๋๋ฐ ์ฌ๋ฏธ์๋ api๊ฐ ๋ง๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฉด์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋๋ ๋ฐ์ ์ฌ๋ฏธ์์๋ค. ์ด๋ฒ ๊ธฐํ์ tailwind๋ ์ฒ์ ์ฌ์ฉํด๋ดค๋๋ฐ class name์ style์ ์ค ์ ์๋ค๋ ์ ์ด ์ ๊ธฐํ๋ ๊ฒ ๊ฐ๋ค.
ํ ๊ฐ์ง ์์ฌ์ ๋ ์ ์ api ํค๋ฅผ ์จ๊ธฐ๋ ๋ฐ ์คํจํ ๊ฒ์ธ๋ฐ ์ด ๋ถ๋ถ์ ์ข ๋ ๊ณต๋ถ๋ฅผ ํด๋ด์ผ๊ฒ ๋ค ใ
ใ

return (
<div className='pageContainer'>
<Header />
<Image src={src} alt={name} />
<Text {...CommandText} />
<Text {...NameText} />
<Text {...PrizeText} />
<Button onClick={() => deleteValue()}>
<Text {...BackButton} />
</Button>
</div>
);
...์๋ต
<div className="appContainer">
{typeof currentPageId === 'number' && <Page {...historyValue}></Page>}
</div>
...์๋ต
ํ์ ํ์ด์ง ์ด๋ํ๋ฉด url์ด ๋ฐ๋๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ๊ทธ์ url์ด ํญ์ ๋ฐ๋์ด์ผ ํ๋ค๋ ํธ๊ฒฌ์ด ์์๋ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง url์ด ๋ฐ๋์ง ์์ ์ฑ๋ก๋ ํ์ด์ง ์ด๋์ด ๊ฐ๋ฅํ๊ณ , ์ด๋ฒ์๋ ๊ทธ๊ฒ์ ์ด์ ์ ๋ง์ถฐ ๊ตฌํํ๋ค. ์ฒ์ ํ์ด์ง ์ด๋๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์ฌ๋ฏธ๊ฐ ์์ ๊ฒ ๊ฐ์ ๊ณ ๋ฏผํ๋ ์ค ์ํผ์ค ํฌ์คํฐ๊ฐ ์๊ฐ๋ฌ๊ณ , ์ฌ๋ฏธ์์ ๊ฒ ๊ฐ์ ํ์ด์ง ํ ํ๋ฆฟ์ ์ํผ์ค ํฌ์คํฐ๋ก ๋ง๋ค์๋ค. ํ์๋ค์ ์ฌ์ง๊ณผ ํ์๊ธ, ์ด๋ฆ ๋ฑ์ ๋ฐ์ดํฐ๋ก ์ ๋ฆฌํ ๋ค, ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๋ฐ์ดํฐ ๊ฐ๋ง ๋ฐ๋๋๋ก ์ค์ ํ์ผ๋ฉฐ, ๋ง์ฝ ํ์ด์ง ๊ตฌ์ฑ์ด ๋ค ๋ฌ๋๋ค๋ฉด ์ปดํฌ๋ํธ ์์ฒด๋ฅผ ๋ฐ๋๋๋ก ์ค์ ํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค. ์ด ๊ณผ์ ์ญ์ ์์ฌ์ด ์ ์ด ์๋ค๋ฉด ํธ๋์ง์ ์ ๊ตฌํํ์ง ๋ชปํ๋ค๋ ์ ์ด๋ค. ์ข ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ๋ฃ์ด ์ง์ง ํฌ์คํฐ๊ฐ ๋์ด๊ฐ๋ ๊ฒ์ฒ๋ผ ํ๋ค๋ฉด ๋ ์ข์์ ๊ฒ ๊ฐ๋ค๋ ์์ฌ์์ด ์๋ค.
7์ ํ๊ณ ๋ ์ธ์ ๋ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
- ๊ณผ์ ๋ฑ์ ์ํํ ๋ ๋ฐ๋ก ์ฝ๋๋ฅผ ์ง์ง ๋ง๊ณ , ๋จผ์ ์ฐ์ ์์์ ๊ตฌํ์์ ๋ฐ ๊ธฐ๋ฅ์ ๋ชฉ๋ก์ ์์ฑํด์ผ ๊ฒ ๋ค.
- ๋๊ตฌ๋ ์ง ์ฝ๋๋ฅผ ๋ดค์ ๋ ์๋ฌธ์ ๋ณด๋ค๋ ์ดํดํ ์ ์๋๋ก ์ฝ๊ฒ ์ง์ผ๊ฒ ๋ค.
- javascript ํ์คํ๊ฒ ์ก๊ณ ๊ฐ์ผ๊ฒ ๋ค.
์ด ๋ฆฌ์คํธ์์ ๋ฌ์ฑํ ๊ฒ์ 1๊ฐ์ง ๋ฐ ์ ๋ ์ธ ๊ฒ ๊ฐ๋ค. ๋จผ์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ง๋ ๊ฒ์ธ๋ฐ, ์ด ๋ถ๋ถ์ ๋ง์ด ๊ฐ์ ๋์์์ ๋๊ผ๋ค. ์ฝ๋ ๋ฆฌ๋ทฐํ๊ธฐ ์ ์ ์ต๋ํ ๋ฆฌํฉํ ๋ง์ ํ๋ฉด์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ๊ณ ์ ๋ ธ๋ ฅํ์ผ๋ฉฐ, ๋ณ์๋ช ์ด๋ ํ์ผ๋ช ๋ฑ ๋ค์ด๋ฐ์ ์ ๊ฒฝ์ ๋ง์ด ์ฐ๊ณ ์ ํ๋ค. ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํ๋ฉด์ ๋ง์ด ๊ฐ์ ๋จ์ ๋๊ผ๊ณ , ์ฐ์ ์์์ ๊ตฌํ์์๋ฅผ ๋จผ์ ์๊ฐํ ๋ค ์ฝ๋๋ฅผ ์ง๋ ์ต๊ด์ผ๋ก ์ด์ด์ง๊ฒ ๋์๋ค. ์์ง ๋ง์ด ๋ถ์กฑํ์ง๋ง, ์ ์ ๋จผ์ ๊ณํ์ ์๋ฆฝํ๊ณ ์ฝ๋๋ฅผ ์ง๋๋ฐ ์ต์ํด์ง๊ณ ์ ๋ ธ๋ ฅํ๋ ์ค์ด๋ค. ๋ง์ง๋ง์ผ๋ก js๋ฅผ ํ์คํ๊ฒ ์ก๊ณ ๊ฐ๊ธฐ๋ก ํ๋๋ฐ ์ด๋ ์ง์ผ์ง์ง ๋ชปํด ๋ง์ ์์ฌ์์ ๋๊ผ๋ค. vue์ react์๋ง ์ง์คํ๋ ๊ฒ ๊ฐ์ ์์ js๋ ๊ณต๋ถํ๋๋ฐ ์๊ฐ์ ํฌ์ํด์ผ ํจ์ ๋๋ผ๋ฉฐ ๋ฐ์ฑํ๋ค.
๋ค๋น๊ฒ์ด์ ๋๋ฌด ๊น๋ํ๊ณ ๊ท์ฝ๋ค์ใ ใ ์ด๋ฒ ํ ํ๋ก์ ํธ๋ฅผ ํตํด์ ๋์ฑ ์ฑ์ฅํ ์ง์ ๋์ด ๊ธฐ๋๋ฉ๋๋ค ๐