방명록
- API 연동하기, axios2022년 06월 09일 05시 00분 22초에 업로드 된 글입니다.작성자: 원2728x90반응형
일단 axios 를 설치하자
둘중에 하무거나 npm 쓰면 npm yarn 하면 yarn
npm install axios
yarn add axios
설치후 package.json 에 설치가 잘 되어 있는지 확인하자~
useState 와 useEffect 로 데이터 로딩
요청에 대한 상태를 관리 할 때에는 총 3가지 상태를 관리해 줘야한다
1. 요청의 결과
2. 로딩 상태
3. 에러
일단 컴포넌트에 Users.js 생성
import React, { useEffect, useState } from 'react'; import axios from 'axios'; function Users() { const [users, setUsers] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const fetchUsers = async () => { try { // 요청 시작시 error 와 users 초기화 setError(null); setUsers(null); // loadding 상태를 true 로 변경 setLoading(true); const response = await axios.get( 'https://jsonplaceholder.typicode.com/users' ); setUsers(response.data); } catch (e) { setError(e); } setLoading(false); }; fetchUsers(); },[]); if (loading) return <div>로딩중...</div>; if (error) return <div>에러발생!!</div>; if (!users) return null; return ( <ul> {users.map(user => ( <li key={user.id}> {user.username} ({user.name}) </li> ))} </ul> ); } export default Users;
useEffect 에 첫번째 파라미터로 등록하는 함수에는 async 사용 불가임
때문에 함수 내부에서 async 를 사용하는 새로운 함수를 선언 해줘야함
async > 프로미스 반환, 아니것도 프로미스로 감싸줌
await > 프로미스가 처리되기를 기다림
결과
잘~ 뜬다 ㅎㅎ
일부러 에러내기
url 을 아무렇게나 수정하고 결과를 보자
바로 에러 발생했다고 뜬다
버튼을 눌러서 API 재요청하기
아까 만들었던 fetchUsers 함수를 바깥으로 꺼내주고, 버튼을 만들어서 해당함수를 실행시키게 하면 된다.
Users.js
import React, { useEffect, useState } from 'react'; import axios from 'axios'; function Users() { const [users, setUsers] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const fetchUsers = async () => { try { // 요청 시작시 error 와 users 초기화 setError(null); setUsers(null); // loadding 상태를 true 로 변경 setLoading(true); const response = await axios.get( 'https://jsonplaceholder.typicode.com/users' ); setUsers(response.data); } catch (e) { setError(e); } setLoading(false); }; // 바깥으로 꺼냄 useEffect(() => { fetchUsers(); },[]); if (loading) return <div>로딩중...</div>; if (error) return <div>에러발생!!</div>; if (!users) return null; return ( <> <ul> {users.map(user => ( <li key={user.id}> {user.username} ({user.name}) </li> ))} </ul> <button onClick={fetchUsers}>다시 호출</button> </> ); } export default Users;
버튼이 생기고 버튼을 누르면 재호출이 된다. 좋아요
728x90반응형'JS Library > React' 카테고리의 다른 글
CSS Module (0) 2022.08.01 Sass (0) 2022.08.01 useReducer 요청 상태 관리 (0) 2022.06.09 Immer 라이브러리 (0) 2022.05.26 Context API 전역 값 관리 (0) 2022.05.26 커스텀 Hooks (0) 2022.05.25 다음글이 없습니다.이전글이 없습니다.댓글