2020 Dev-Matching: 웹 프론트엔드 개발자(상반기)
기존의 코드를 수정하고 추가구현이 진행됩니다.
테스팅에 목적이 아닌 학습을 위한 구현자료로써, 현재 작성자의 학습에 맞춰 기존의 코드를 함수형 컴포넌트
로 재구성하고 필요한 임의의 자료를 사용하였습니다.
요구사항
주어진 요구사항의 순서는 다음과 같습니다. 단, 사용자 테스팅을 포함하여 개발을 진행하기 때문에 주어지는 요구사항은 개발자 스타일에 따라 변경하였습니다.
코드가 전체적으로 div로만 이루어져 있습니다. 시멘틱한 방법으로 마크업을 변경하세요.
유저가 사용하는 디바이스의 길이에 따라 row당 column개수를 적절히 변경해야 한다.
992px 이하 3개 | 768px 이하 2개 | 576px 이하 1개 |
---|
fetch는 async await를 활용하여 진행하고 에러가 나는 경우 적절히 처리한다
status code에 따라 에러메세지를 분리하여 작성한다
const request = async (url: string) => {
try {
const result = await fetch(url);
return result.json();
} catch (e) {
console.warn(e);
}
}
const api = {
fetchGif: keyword => {
return request(`${API_ENDPOINT}/api/gif/search?q=${keyword}`);
},
fetchGifAll: () => {
return request(`${API_ENDPOINT}/api/gif/all`);
}
};
HTTP/1.1 200 OK
{
"data": [{
id: string
url: string
name: string
}]
}
Get : /cats/search | query ⇒ q=””
HTTP/1.1 200 OK
{
"data": [{
id: string
url: string
name: string
}]
}
Get : /cats/:id
HTTP/1.1 200 OK
{
"data": {
name: string
id: string
url: string
width: number
height: number
temperament: string
origin: string
}
}