axios란 ?
React에서 AJAX를 사용하기 위해 사용되는 HTTP Client 라이브러리입니다.
세팅하기
우선 터미널 창에
yarn add axios
를 입력해서 axios 라이브러리를 설치해줍니다.
axios를 사용할 파일에
import axios from 'axios';
입력하면 됩니다.
사용하기
App.js
import axios from 'axios'
import data from './data/data';
function App() {
return (
<div>
<button onClick ={() =>{
axios.get('https://jsonplaceholder.typicode.com/users')
.then(()=>{
console.log('success')
})
.catch(()=>{
console.log('fail')
})
}}>불러오기</button>
</div>
);
}
export default App;
App.js를 이렇게 구성해줬습니다.
https://jsonplaceholder.typicode.com/
JSONPlaceholder - Free Fake REST API
{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. As of Oct 2021, serving ~1.7 billion requests each month.
jsonplaceholder.typicode.com
이 사이트를 통해서 여러 데이터를 접할 수 있습니다. 연습용으로 좋은 것 같습니다.
axios에 대해서 설명드리자면
axios.get('데이터를 불러올 URL') 을 하게되면 URL에서 데이터를 가져오게 됩니다.
.then 뒤 에는 데이터를 불러오기 성공했을때 실행시킬 문장을 작성하고
.catch 뒤에는데이터를 불러오기 실패했을때 실행시킬 문장을 작성하면 됩니다.
이것이 기본적인 axios 사용 방법입니다.
React Hook과 axios 같이 사용하기
https://react.vlpt.us/integrate-api/
4장. API 연동하기 · GitBook
4. API 연동하기 이번 장에서는 리액트 애플리케이션에서 API 를 연동하는 방법을 배우게 됩니다. 우리가 웹 애플리케이션을 만들게 될 때 데이터를 브라우저에서만 들고 있는게 아니라, 데이터를
react.vlpt.us
이 곳을 참고했습니다.
useState 와 useEffect 로 데이터 로딩하기
useState 를 사용해 상태를 관리하고,
useEffect 를 이용해 렌더링 되는 시점에 요청을 시작하는 작업을 해보겠습니다.
요청에 대한 상태를 관리 할때 3가지 상태를 관리해 주어야합니다.
- 요청의 결과
- 로딩 상태
- 에러
Users.js 라는 새로운 파일을 만들고 코드를 작성해줍니다.
Users.js
import React, {useState, useEffect} 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{
setError(null)
setUsers(null)
setLoading(true)
const response = await axios.get(
'https://jsonplaceholder.typicode.com/users'
)
setUsers(response.data) //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
버튼을 새로 만들어줘서 새로고침이 가능하도록 만들어 보겠습니다.
Users.js
import React, {useState, useEffect} 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{
setError(null)
setUsers(null)
setLoading(true)
const response = await axios.get(
'https://jsonplaceholder.typicode.com/users'
)
setUsers(response.data) //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})
<button onClick={fetchUsers}>다시 불러오기 </button>
</li>
))}
</ul>
)
}
export default Users
useEffect()를 밖으로 따로 빼주면 fetchUsers라는 함수를 사용할 수 있게됩니다.
그 후 버튼에 onClick이벤트를 전달해 줍니다.
감사합니다.
'React' 카테고리의 다른 글
React 에서 onChange 함수 이용하기! (0) | 2022.10.23 |
---|---|
React Redux 사용하기! (0) | 2022.09.26 |
React 에서 Fontawesome 사용하기 (0) | 2022.09.08 |
React 에서 2가지 이상 import 하기 (0) | 2022.09.08 |
React 에서 Sweetalert2 사용하기! (0) | 2022.09.03 |