- Today
- Total
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- React
- error
- es6
- Java Script
- get
- 프론트엔드
- 에러처리
- 웹
- JavaScript
- 모던 자바스크립트 deep dive
- js
- 비동기
- 백준 실버
- html
- 이터러블
- 모던 자바스크립트
- map
- git
- 알고리즘
- async
- 네트워크
- git error
- 백준
- C++
- deep dive
- 자바스크립트
- 그림으로 배우는 http&network
- Angular
- 상태관리
- http
Archives
sharingStorage
React API 연동하기 2. useReducer로 요청상태 관리하기 본문
React API 연동하기 1번 과정에서 상태관리를 위해 사용했던 useState대신에 useReducer를 사용해보겠습니다.
useReducer를 사용했을 때의 좋은 점
1. useState의 setState 함수를 여러번 사용하지 않아도 돼서 코드의 길이가 짧아진다.
2. reducer로 로직을 분리하면 재사용이 용이하다.
결과
User.js
import React, { useEffect, useReducer } from 'react';
import axios from 'axios';
const reducer = (state, action) => {
switch (action.type) {
case 'LOADING':
return {
loading: true,
data: null,
error: null,
};
case 'SUCCESS':
return {
loading: false,
data: action.data,
error: null,
};
case 'ERROR':
return {
loading: false,
data: null,
error: action.error,
};
default:
throw new Error(`Unhandled action type: ${action.type}`);
}
};
const Users = () => {
const [state, dispatch] = useReducer(reducer, {
loading: false,
data: null,
error: null,
});
const fetchUsers = async () => {
dispatch({ type: 'LOADING' });
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
dispatch({ type: 'SUCCESS', data: response.data });
} catch (e) {
dispatch({ type: 'ERROR', error: e });
}
};
useEffect(() => {
fetchUsers();
}, []);
const { loading, data: users, error } = state; //state.data 를 users키워드로 조회가능
if (loading) return <div>로딩중..</div>;
if (error) return <div>에러가 발생했습니다</div>;
if (!users) return null;
return (
<div>
<ul>
{users.map((user) => (
<li key={user.id}>
{user.username} ({user.name})
</li>
))}
</ul>
<div>
<button onClick={fetchUsers}>다시 불러오기</button>
</div>
</div>
);
};
export default Users;
App.js
import './App.css';
import Users from './Users.js';
import React from 'react';
const App = () => {
return <Users></Users>;
};
export default App;
출처 :
'Front-End > React' 카테고리의 다른 글
React18 new Hooks (5) | 2023.12.07 |
---|---|
React custom hooks : what, how, when, why (5) | 2023.11.16 |
React query와 Asyncronous Recoil (feat Suspense, Loadable) (8) | 2023.05.08 |
Create React App환경에서 이미지 불러오는 방법(public vs src) (0) | 2023.01.25 |
React API 연동하기 1. React API 사용해보기 (0) | 2023.01.11 |
Comments