๋ฐฑ์๋ ์คํค๋ง DTO๋ฅผ ํ์ ์คํฌ๋ฆฝํธ ํํ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค. penapi-typescript๋ ์ค์จ๊ฑฐ๋ฅผ ์ฝ๊ณ ๋ฐฑ์๋์ ์๋ต์ typescriptํํ๋ก ๋ฐ๊ฟ์ค๋ค.
npx openapi-typescript ${schema docs url} --output schema.ts
์ด์ axios์ ์ ๋ค๋ฆญ ํํ๋ก APIRequest,APIResponse๋ฅผ ๊ฑธ์ด์ค ์ ์๋ค. ์ด๋ฌ๋ฉด ์๋ต ๊ฐ์ด ์๋์ผ๋ก ์ถ๋ก ๋์ด์ ๋๋ฌด ์ข์ ๋ฏ ํ๋ค!
import { components } from '../../../../schema'
import { useInfiniteQuery } from '@tanstack/react-query'
import { axiosClient } from '@/services'
type APIResponse =
components['schemas']['ApiResponseTemplateCurationListResDto']
์ฟผ๋ฆฌ์ mutation์ 1๋1๋ก ๋์ํ๋๊ฒ ๋ฐ๋์งํ ๊ฒ ๊ฐ๋ค. queryํจ์์ ์ฟผ๋ฆฌ,mutation์ ๋ ๋ค exportํด์ ์ธ ์ ์๊ฒ ํ๋ฉด ๋ ์์ง๋ ์์ง ์์๊น
๋งต์ ์ฐ๋ ๊ฑด ๋๋ฌด ์ด๋ ต๋ค. ์ฝ๋๊ฐ ๋๋ฌ์์ง๊ณ useEffect๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋น๋ํด ์ง ์๋ฐ์ ์๋๋ฐ, ๋ฐฉ๋ฒ์ ์ฐพ๋ค๊ฐ DI๋ฅผ ๊ฐ๋ ์ ๋ดค๋ค.
๊ตฌ๊ธ ๋งต -> ๋ค์ด๋ฒ ๋งต์ผ๋ก ๋ค์ด๋ฒ ๋งต -> ์นด์นด์ค ๋งต์ผ๋ก ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋๋ฌ์์ง ์ฝ๋๋ฅผ ๋ฏ์ ์ ๋ฐ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ ์ ํ ์ถ์ํ์ ์ง๋์ ๋ํ DI๋ฅผ ์ฃผ์ ํด์ฃผ๋ฉด ๋๋๋ฐ, ํ๋ํ๋ ํ์ด๊ฐ๋ณด์..!
์๋ฌ๋ฐ์ด๋๋ฆฌ์ Suspense๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ฌด์ง์ฑ ๊ฐ์ธ๋ ๊ฒ ์ข์๊ฑธ๊น? ๋ด๊ฐ ํจ๊ณผ์ ์ผ๋ก ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋๊ฑด์ง? ์ ์ธ์ ์ด๋ผ๋ ํจ์ ์ ๋น ์ ธ์ ๋ถํ์ํ๊ฒ ๋ํ์ ํ๋๊ฒ ์๋์ง ๊ณ ๋ฏผ์ด ๋๋ค.
๋ฌดํ์คํฌ๋กค์ ์ด์ ์ต์ํด์ก๋ค..๋ฟ๋ฏ(!)
tanstack-router๋ฅผ ์จ๋ดค๋ค. type-safeํ๊ฒ ๋ผ์ฐํ ์ ๋ง๋ค์ด์ฃผ๊ณ ์ ์ ํ ํ์ ์ถ๋ก , ํ์ ์๋ฌ๋ฅผ ๋ฑ์ด์ค์ ๋๋ฌด ํธํ๊ณ ์ข๋ค. ๊ทธ๋ฆฌ๊ณ query-stringํํ๋ก ๋๊ธธ ์๋ ์๊ณ , ์ ์ธ์ ์ผ๋ก private-route์ฒ๋ฆฌ๋ ํ ์ ์์ด์ ์ข๋ค
์๋ง ๋ค์ react์ router๋ tanstack-router๊ฐ ์งฑ์ ๋จน์ง ์์๊น..?