728x90
    
    
  반응형
    
    
    
  이전 포스트에서 Redux-toolkit을 이용하여 상태관리하는 법을 알아보았다.
이번 포스트에서는 createAsyncThunk로 비동기 API를 다루어보자.
1. 이전 포스트에서 함수를 추가한다.
import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit'
import axios from 'axios'
// 인터페이스
export interface UserInterface {
    number : Number;
}
// state 초기값
const initialState: UserInterface = {
    number = 0;
}
// createAsuncThunk function
export const refreshList = createAsyncThunk(
    'user/refreshList',
    async (body: any, thunkAPI) => {
        console.log("body : ", body)
        try {
            const response = await axios.get('/api/user/', { params: { user__id: "teepo" } })
            return (await response.data)
        }
        catch (Err) {
            return thunkAPI.rejectWithValue(Err)
        }
    }
)
export const userSlice = createSlice({
    name: 'user',
    initialState,
    reducers: {
    },
    extraReducers: (builder) => {
    	// pending
    builder.addCase(refreshList.pending, (state, action) => {})
    	// fulfilled
        .addCase(refreshList.fulfilled, (state, action) => {})
		// rejected
        .addCase(refreshList.rejected, (state, action) => {})
    }
})
// 액션의 이름을 담아준다 ( CreateSlice 으로 선언한 액션은 생략 가능 !)
export const { } = userSlice.actions;
export default userSlice.reducer;
createAsyncThunk는 3가지의 상태값을 가진다. 각각의 상황에 맞게 로직을 구성해주면 된다.
- pending : 대기
 - fulfilled : 이행
 - rejected : 거부
 
컴포넌트에서의 사용은 다음과 같다.
 ...
 
import { useDispatch, useSelector } from "react-redux";
import { refreshList } from "../../../../store/reducers/user/userSlice";
 ...
 
 const userState = useSelector((state: RootState) => state.user)
 const userDispatch = useDispatch<AppDispatch>();
 
  ...
  
     useEffect(() => {
        refreshListHandler(firstRefreshBody(loginData.company_code, postNumber, 0));
        try {
            userDispatch(refreshList({ aa: "dd" })).then(({ payload }: any) => {
                console.log("222", payload)
            })
        }
        catch (err) {
            console.log(err)
        }
    }, []);
action 함수에 원하는 파라미터값을 전달하고 axios를 실행한 뒤 결과값을 다시 반환해주는 시스템이다.
구글링할 때 잘 안나왔는데 typescript에서 AsyncThunkAction 쪽에서 자꾸 then이 없다는 에러가 떴다.
useDispatch<AppDispatch>를 추가하니 에러가 사라졌다.
728x90
    
    
  반응형
    
    
    
  'Front-End > Next.js' 카테고리의 다른 글
| Next.js | 세션(express-session)과 토큰(jwt)을 사용한 중복 로그인 방지 ( 기존 사용자 로그아웃 여부 확인) (0) | 2022.03.07 | 
|---|---|
| Next.js | eslint plugin 설정하기 (0) | 2022.02.24 | 
| Next.js | Redux-toolkit in Next.js( typescript ) | 기본 세팅 (0) | 2022.02.22 | 
| Next.js | 나만의 React Scheduler Calendar 만들기 ( 캘린더 객체화 ) (0) | 2022.01.06 | 
| Next.js | Json in Json 상태 관리 (0) | 2022.01.04 |