then()
์ฒด์ธ ์ฆ, then()
ํธ์ถ ๋ค์ ๋ ๋ค์ then()
์ ์ฌ์ฐจ ํธ์ถํ ์ ์์๋ค. ํ์ง๋ง ์ด๋ฐ then()
์ฒด์ธ ๋์ ๊ฐ๋จํ๊ฒ async
์ await
์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ์์
์ ์ํํ ์๋ ์๋ค.function fetchMoviesHandler() {
fetch("https://swapi.dev/api/films")
.then((res) => {
return res.json();
})
.then((data) => {
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
});
}
async function fetchMoviesHandler() {
const response = await fetch("https://swapi.dev/api/films");
const data = await response.json();
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
}
befor์ after ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ธฐ์กด์ then()
์ฒด์ด๋์ ํตํด ์์ฑํ ๋น๋๊ธฐ ์ฝ๋๋ณด๋ค async/await
๋ฅผ ์ฌ์ฉํด์ ์์ฑํ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๋
์ฑ์ด ๋์ ๊ฑธ ํ์ธํ ์ ์๋ค. ์ด๋ ๋จ์ํ ์ฝ๋ ๋ณํ์ ๊ฐ๊น์ฐ๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ then()
์ฒด์ด๋์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ์ญํ ์ ํ ๋ฟ์ด์ง๋ง, ์ฝ๋๋ฅผ ๋จ์ํ ์ํค๊ณ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋๋ฉฐ ๊ฐ๋
์ฑ ์ญ์ ๋์์ง๋ค๋ ์ฅ์ ์ด ์๋ค. ๊ฒ์ผ๋ก ๋ณด๊ธฐ์ ๋จ๊ณ์ ์ผ๋ก ์คํ๋๋ ์ฆ, ๋๊ธฐ์ ์์
์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ then()
์ฒด์ด๋๊ณผ ๊ฐ์ ๋น๋๊ธฐ์ ์์
์ผ๋ก ์งํ๋๊ณ ์๋ ๊ฒ์ด๋ค.
const [isLoding, setIsLoding] = useState(false);
isLoding
์ด๋ผ๋ boolean ์ false ์ด๊ธฐ๊ฐ์ ๊ฐ์ง๋ ์ํ(state)๋ฅผ ๋ง๋ค์๋ค. ์ด๊ธฐ ๊ฐ์ false ๋ก ์ค์ ํ ์ด์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ ๋๋ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ ๋๋ง๋ ๋ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ๋ก๋๋๋ ๊ฑด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
const response = await fetch("https://swapi.dev/api/films");
const data = await response.json();
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
setIsLoding(false);
}
fetchMoviesHandler
ํจ์๋ฅผ ํธ์ถํ์ ๋ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ setIsLoding
์ ํธ์ถํ๊ณ , true ๊ฐ์ผ๋ก ์
๋ฐ์ดํธํด์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ํ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์์ํ ๋ ํด๋น isLoding
์ํ(state) ๋ณํ๊ฐ ๋ฐ์ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ ๋ค์๋ isLoding
์ ์ํ๋ false ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ setMovies()
๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค ๋ค์๋ ๋ค์ isLoding
์ ์ํ๋ฅผ false๋ก ์
๋ฐ์ดํธ ํด์ค๋ค.<section>
<MoviesList movies={movies} />
</section>
isLoding
์ ์ํ๋ฅผ ์ด์ฉํด์ ๋ก๋ฉ ์์ด์ฝ์ด๋ ๋ก๋ฉ ํ
์คํธ๋ฅผ ๋ ๋๋ง ํ ์ ์๊ฒ ๋๋ค. ๊ฐ๋ น ๋ก๋ฉ ์ค์ด ์๋ ๋์๋ง MoviesList
์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ์ ์์ ๊ฒ์ด๋ค.<section>{!isLoding && <MoviesList movies={movies} />}</section>
<section>
{!isLoding && <MoviesList movies={movies} />}
{isLoding && <p>Loding...</p>}
</section>
isLoding
์ด๊ฑฐ๋ !isLoding
๋ง ์๋ ๊ฒ์ ์๋๋ค. ๋ก๋ฉ์ด ์๋ฃ๋์์ผ๋, ์ํ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ถ๋ช
์์ธ์ ์ผ๋ก ์กด์ฌํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์ฐ๋ฆฌ๊ฐ fetch ๋ก ๋ฐ์์ค๋ ์ํ ๋ฐ์ดํฐ๊ฐ ์์ ๋์ ํน์ fetch ๊ฐ ์คํจํด์ movies
๊ฐ ๋น ๋ฐฐ์ด์ผ ๋๋ฅผ ๊ฐ์ ํด์ ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ฆด ์ ์์ด์ผ ํ๋ค.<section>
{!isLoding && movies.length > 0 && <MoviesList movies={movies} />}
{isLoding && <p>Loding...</p>}
</section>
movies.length
๋ฅผ ์ด์ฉํ ๊ฐ์ด 0 ์ด์์ผ ๋(์ฆ, ๋ฐ์ดํฐ๊ฐ 1๊ฐ ์ด์์ผ๋ก ๋ด๊ฒผ์ ๋)๋ฅผ &&
์ฐ์ฐ์๋ก ์ถ๊ฐํ์ฌ MoviesList
์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ์ ์๋๋ก ํด์ฃผ๊ณ ,<section>
{!isLoding && movies.length > 0 && <MoviesList movies={movies} />}
{!isLoding && movies.length === 0 && <p>Found no movies.</p>}
{isLoding && <p>Loding...</p>}
</section>
movies.length
๋ฅผ ์ด์ฉํ ๊ฐ์ด 0์ผ ๋(movies
๊ฐ ๋น ๋ฐฐ์ด์ผ ๋)๋ฅผ &&
์ฐ์ฐ์๋ก ์ถ๊ฐํ์ฌ "Found no movies." ํ
์คํธ๋ฅผ ํ๋ฉด์ ํ์ํ ์ ์๋๋ก ํด์ฃผ์๋ค.!isLoding
), ์ํ๋ ๋ถ๋ฌ์ค์ง ์์์ผ๋ "Found no movies." ๊ฐ ํ์๋๊ณ , ๋ฒํผ์ ๋๋ฌ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ง์ฐ ์๊ฐ์๋ ๋ก๋ฉ์ด ๋์๊ธฐ์(isLoding
), "Loding..." ํ๋ฉด์ ํ์๋์์ผ๋ฉฐ, ๋ก๋ฉ์ด ๋๋๊ณ (!isLoding
) ์ํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒผ์ผ๋ฏ๋ก(movies.length > 0
) ์ํ ๋ฐ์ดํฐ์ ๋ชฉ๋ก์ด ํ๋ฉด์ ์ถ๋ ฅ(MoviesList
์ปดํฌ๋ํธ ๋ ๋๋ง)๋๊ณ ์์์ ํ์ธํ ์ ์๋ค.์ด๋ฐ ๋ก๋ฉ ์ฒ๋ฆฌ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ ๊ณผ์ ์์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ด๋ค. ์ฌ์ฉ์์๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์ํ๋ฅผ ์๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ค์ ํ์๋๋ ๋ก๋ฉ ๋ฌธ์๋, ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์ง ์์์ ๋์ ์ํ๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ ์ด ๋ชจ๋ ๊ฒ๋ค์ด ์์ ๋์๋ ์ฌ์ฉ์ ๊ฒฝํ ๋ฉด์์ ํฐ ์ฐจ์ด๊ฐ ์์ ์ ๋ฐ์ ์์ ๊ฒ์ด๋ค.
const response = await fetch("https://swapi.dev/api/films");
const response = await fetch("https://swapi.dev/api/film");
const [error, setError] = useState(null);
fetchMoviesHandler
ํจ์๊ฐ ํธ์ถ๋๋ฉด, ์ด error
๋ฅผ null
๋ก ๋ค์ ๋๋ ค๋์ผ ํ๋ค. ์ด์ ์ ๋ฐ์์ ์๋ ์๋ ์ค๋ฅ๋ฅผ ์ด๊ธฐํํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
setError(null);
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
setIsLoding(false);
}
error
์ ์ด๊ธฐ ๊ฐ null์ด ์๋๊ธฐ ๋๋ฌธ์ null ์ด์ธ์ ๊ฐ์ ์ฌ์ฉํด์ผ ํ ๊ฒ์ด๋ค.async/await
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ then()
์ฒด์ด๋์ ํตํด ์์
์ ํ๋ค๋ฉด, catch()
๋ฅผ ์ด์ด ์ถ๊ฐํด์ ์ค๋ฅ๋ฅผ ํ์ธํด์ผ ํ๋ค. ํ์ง๋ง async/await
์ ์ฌ์ฉํ๋ค๋ฉด try-catch
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ฝ๋์ ์คํ์ ์๋(try
)ํด์ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ํฌ์ฐฉ(catch
) ํ๊ธฐ ์ํด์ ๋ง์ด๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
setError(null);
try {
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
setIsLoding(false);
} catch (error) {}
}
try
๋ธ๋ก ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ ๋ฐํํ๋ ๋ชจ๋ ์ฝ๋๋ค์ ๋ฃ์ด์ฃผ๊ณ , ์ด try
๋ธ๋ก ์์์ ๋ฐ์ํ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ค์ catch
๋ธ๋ก ์์์ ํฌ์ฐฉํ์ฌ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค. ๋ฐ๋ผ์ try
๋ธ๋ก ์์์ ์ด๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด catch
๋ธ๋ก์์ ์ด๋ฅผ ํ์ธํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.try {
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
if (!response.ok) {
throw new Error("Something went wrong!");
}
const transformedMovies = data.results.map((movieData) => {
return {
id: movieData.episode_id,
title: movieData.title,
openingText: movieData.opening_crawl,
releaseDate: movieData.release_date,
};
});
setMovies(transformedMovies);
setIsLoding(false);
} catch (error) {}
response
๊ฐ์ฒด์๋ ok
๋ผ๋ ํ๋๊ฐ ์กด์ฌํ๋ค. ์ด๋ ์์ฒญ์ด ์ฑ๊ณต์ ์ธ์ง ๊ทธ๋ ์ง ์์์ง๋ฅผ ํ์ํ๋ ์์ญ์ด๋ค. ๊ทธ๋ฌ๋๊น ์ด ok
ํ๋๋ฅผ ์ด์ฉํด์ ์๋ต์ด ok ์ธ์ง ์๋์ง๋ฅผ ํ์ธํ๊ณ ์ด์ ๋ํด ์์ฒด์ ์ธ ์ค๋ฅ๋ฅผ ๋ง๋ค์ด์ ํ์ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ ๋นํ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ new Error()
๋ก ์์ฑํด์ ํ์ํ๋ฉด ๋๋ค. ๋ฌผ๋ก ์๋ฒ์์ ๋์์ค๋ ์ค๋ฅ ์๋ต ์ฝ๋์ ๋ฐ๋ผ์ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฝ์ด๋ค์ผ ์๋ ์๊ณ , ๋จ์ง ์์ ์ฐ๋ฆฌ๊ฐ ํ๋ ๊ฒ์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ฉ์ธ์ง๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํ ์๋ ์๋ค. ์๋ฌดํผ ์ด ๋ฉ์ธ์ง๋ ์๋ต(response
)์ ๋ฌธ์ ๊ฐ ์์ ๋์๋ง ํ์ํ๋๋ก ํ ๊ฒ์ด๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
setError(null);
try {
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
if (!response.ok) {
throw new Error("Something went wrong!");
}
...
} catch (error) {
}
}
catch()
๋ธ๋ก์ ๋ง๋ค์ด๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ catch()
๋ธ๋ก ์์์ setError
๋ฅผ ํธ์ถํ๊ณ null ๊ฐ์ด ์๋ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๋ฃ์ด๋๋ค.catch (error) {
setError(error.message);
}
error
๋ null ์ด ์๋ ๋ฌธ์์ด(error.message
)์ด ๋์๋ค. ์ด์ error
์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ๋์์ผ๋ ํ๋ฉด์ ํ์๋๋ ๊ฒ๋ค ์ญ์ ์ ํด์ค์ผ ํ๋ค. ์ค๋ฅ์ ์กด์ฌ ์ฌ๋ถ์ ๋ฐ๋ผ ํ์๋๋ ๊ฒ๋ค๋ ๋ณํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.{
!isLoding && movies.length > 0 && <MoviesList movies={movies} />;
}
{
!isLoding && movies.length === 0 && <p>Found no movies.</p>;
}
{
isLoding && <p>Loding...</p>;
}
{
!isLoding && error && <p>{error}</p>;
}
!isLoding
) ์ค๋ฅ๊ฐ ์๋ค๋ฉด (error
๊ฐ null์ด ์๋๋ผ, ๊ฐ์ด ์กด์ฌํ๋ค๋ฉด) ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์๋๋ก ์์ฑํด์ค๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
setError(null);
try {
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
if (!response.ok) {
throw new Error("Something went wrong!");
}
...
setMovies(transformedMovies);
setIsLoding(false);
} catch (error) {
setError(error.message);
setIsLoding(false);
}
}
setIsLoding(false)
)๋๊ฒ ํด์ผ๋ง ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ตฌ๋ฌธ(setIsLoding(false)
)์ try-catch
๋ธ๋ก ๋ค์ ์ค์ ํด์ ์๋ต์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์๊ฑฐ๋ ์ค๋ฅ๋ฅผ ๋ฐ์๋ ์๊ด์์ด setIsLoding(false)
์ ์ค์ ํ์ฌ ๋ก๋ฉ์ด ๋๋ฌ์์ ์๋ฆฌ๋ ๊ฒ๋ ๊ด์ฐฎ์ ๊ฒ์ด๋ค.async function fetchMoviesHandler() {
setIsLoding(true);
setError(null);
try {
const response = await fetch("https://swapi.dev/api/film");
const data = await response.json();
if (!response.ok) {
throw new Error("Something went wrong!");
}
...
setMovies(transformedMovies);
} catch (error) {
setError(error.message);
}
setIsLoding(false);
}
error.message
)๊ฐ ์ถ๋ ฅ๋๊ณ ์๋ ๊ฑธ ํ์ธํ ์ ์๋ค.response
๋ฐ๋ ๋ถ๋ถ์ ํ์ฑํ๊ธฐ ์ด์ ์ response
์ ์๋ต์ด ok ์ธ์ง๋ฅผ ๋จผ์ ํ์ธํด์ผ ํ๋ค.const response = await fetch("https://swapi.dev/api/film");
if (!response.ok) {
throw new Error("Something went wrong!");
}
const data = await response.json();
{
!isLoding && movies.length > 0 && <MoviesList movies={movies} />;
}
{
!isLoding && movies.length === 0 && <p>Found no movies.</p>;
}
{
!isLoding && error && <p>{error}</p>;
}
{
isLoding && <p>Loding...</p>;
}
{
!isLoding && movies.length > 0 && <MoviesList movies={movies} />;
}
{
!isLoding && movies.length === 0 && !error && <p>Found no movies.</p>;
}
{
!isLoding && error && <p>{error}</p>;
}
{
isLoding && <p>Loding...</p>;
}
!error
)๋ฅผ &&
์ฐ์ฐ์๋ก ์ถ๊ฐํด์ค๋ค.๋์ด์ "Found no movies." ๋ฌธ๊ตฌ๋ ์ถ๋ ฅ๋์ง ์๋ ๊ฑธ ์ ์ ์๋ค.
์ด๊ฒ์ด HTTP ์์ฒญ ์ ์ก์์ ๊ฐ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ค ๋ฐฑ์๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ํต์ ํ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ํ(state)๋ฅผ ๋ง์ฃผํ ์ ์์ผ๋ฏ๋ก ๊ฒฝ์ฐ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ ์ค์ํ๋ค. ํญ์ ์๋ต(response)์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค ๋ณด๋ฉด ์ค๋ฅ(error)๋ฅผ ๋ฐ์ ์๋ ๋น ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ฌ๋ฌ ์๋๋ฆฌ์ค์ ๋์ํ๋ ๋ฐฉ๋ฒ์ ํธ๋ค๋งํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
{
!isLoding && movies.length > 0 && <MoviesList movies={movies} />;
}
{
!isLoding && movies.length === 0 && !error && <p>Found no movies.</p>;
}
{
!isLoding && error && <p>{error}</p>;
}
{
isLoding && <p>Loding...</p>;
}
let content = "Found no movies.";
content
์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก "Found no movies." ๋ฌธ๊ตฌ๋ฅผ ํ ๋นํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ํ(state)์ ๋ฐ๋ผ์ ์ด ์์(content
)์ ๊ฐ์ ๋ค๋ฅด๊ฒ ํ ๋นํด๋ณด์.let content = "Found no movies.";
if (isLoding) {
content = <p>Loding...</p>;
}
isLoding
) ์ด๋ผ๋ฉด, content
์ ๊ฐ์ <p>Loding...</p>
๋ก ํ ๋นํ๋ค. ํด๋น if ๋ฌธ ์ฝ๋๋ ์กฐ๊ฑด์ ํด๋นํ๋ ๋ชจ๋ ๊ฒ๋ค์ ๋ฎ์ด์ธ ํ
๋ ์ด ์กฐ๊ฑด์ ๋ํด์๋ ๋ง์ง๋ง์ ํ์ธํ๋๋ก ํ๊ณ , ๋ค๋ฅธ ์กฐ๊ฑด์๋ค์ ์ถ๊ฐํด๋ณด์.let content = "Found no movies.";
if (error) {
content = <p>{error}</p>;
}
if (isLoding) {
content = <p>Loding...</p>;
}
error
) ํ์ธํด์ ๋ง์ฝ ์ค๋ฅ๊ฐ ์๋ค๋ฉด(error
๊ฐ null ์ด ์๋ ๋) <p>{error}</p>
๋ฅผ content
์ ๊ฐ์ผ๋ก ํ ๋นํ๋ค.let content = "Found no movies.";
if (movies.length > 0) {
content = <MoviesList movies={movies} />;
}
if (error) {
content = <p>{error}</p>;
}
if (isLoding) {
content = <p>Loding...</p>;
}
movies.length > 0
์ผ ๋๋ฅผ ๊ฐ์ (๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ ๋)ํด์ MoviesList
์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํ ์ ์๋๋ก content
์ ๊ฐ์ผ๋ก ํ ๋น ํ๋ค.<section>{content}</section>
content
๋ง ๋ ๋๋ง ํด์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด content
๋ณ์์ ์๋ ๊ฐ์ ๊ฐ๊ฐ์ ์ํ(state)์ ๋ฐ๋ผ์ ๋ค๋ฅด๊ฒ ํ ๋น๋ ๊ฒ์ด๋ค.๐จ ํด๋น ํฌ์คํ ์ Udemy์ โReact ์๋ฒฝ ๊ฐ์ด๋โ ๊ฐ์๋ฅผ ๋ฒ ์ด์ค๋ก ํ ๊ธฐ๋ก์ ๋๋ค.
โ๐ป ๊ฐ์ git repo ๋ฐ๋ก๊ฐ๊ธฐ