[axios] post API custom hook으로 만들기
2022. 12. 7. 14:22
반응형
프로그램에서 '앱 생성'이라는 똑같은 기능을 3군데에서 사용해야 했다.
해당 api 호출하는 부분을 커스텀 훅으로 만들어 재사용 가능하도록 했다.
useCreateApp.ts
import { useToast } from '@chakra-ui/react'
import { AxiosError, AxiosResponse } from 'axios'
import { request } from 'axios-client'
import Router from 'next/router'
import { useState } from 'react'
type AppCreateType = {
id: string
}
export const useCreateApp = () => {
const [loading, setLoading] = useState(false)
const toast = useToast()
const mutation = async () => {
try {
setLoading(true)
const result = await request.post<undefined, AxiosResponse<AppCreateType>>('/apps/')
Router.push(`/apps/${result.data.id}/edit`)
} catch (err) {
if (err instanceof AxiosError) {
toast({ title: `${err}`, status: 'error', duration: 2000, isClosable: true })
}
} finally {
setLoading(false)
}
}
return { loading, mutation }
}
export default useCreateApp
// 위에서 만든 mutation을 불러와서 사용하는 파일
const XXX = () => {
const { mutation } = useCreateApp()
return (<Box w="full" onClick={mutation}>앱 만들기</Box>)
}
반응형
'한 걸음 > React & Next.js' 카테고리의 다른 글
[Recharts + typescript] 리차트(recharts)에서 height 고정값 쓰지 않는 법 (0) | 2022.12.19 |
---|---|
[React-hook-form] 일반 버튼 눌렀을 때 formData 가져오기 (0) | 2022.12.14 |
[next.js + axios + django] CSRF 검증에 실패했습니다 error (1) | 2022.11.24 |
[Vite + eslint] 절대경로 설정하기 (0) | 2022.09.13 |
[React + Three.js + blender] 움직이는 3D 캐릭터 웹사이트에 구현 (0) | 2022.09.13 |