๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Router v7 - useFetcher

2026. 6. 26. 15:26ยท๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

React Router v7

 

 

โœ… useFetcher


์›๋ž˜๋Š” Remix์—์„œ ์ฒ˜์Œ ๋“ฑ์žฅํ•œ ๊ธฐ๋Šฅ์ด๊ณ , ๊ทธ ์ดํ›„ React Router์˜ Data Router(6.4+)์— ๋“ค์–ด์˜ด.

ํŽ˜์ด์ง€ ์ด๋™ ์—†์ด loader/action๋งŒ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ๋‹ค. ๋ผ๋Š” ๋ชฉ์ ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง

 

1. ๊ธฐ์กด Form์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•(๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ submit ํ•˜๋Š” ๋ฐฉ์‹)

const fetcher = useFetcher();
<fetcher.Form
  method="POST"
  action={`/community/${loaderData.post.post_id}/upvote`}
>
  <input
    type="hidden"
    value={loaderData.post.post_id}
    name="postId"
  />
  <Button
    variant="outline"
    className={cn(
      "flex h-14 flex-col",
      loaderData.post.is_upvoted
        ? "border-primary text-primary"
        : "",
    )}
  >
    <ChevronUpIcon className="size-4 shrink-0" />
    <span>{loaderData.post.upvotes}</span>
  </Button>
</fetcher.Form>

 

 

2. ์–ด๋– ํ•œ event์—๋„ submit ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹

  const fetcher = useFetcher();
  const absorbClick = (e: React.MouseEvent<HTMLButtonElement>) => {
    e.preventDefault();
    fetcher.submit(
      {
        postId: id,
      },
      { method: "POST", action: `/community/${id}/upvote` },
    );
  };

'๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Email  (0) 2026.07.21
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - Cloudflared  (0) 2026.07.21
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - Supabase SSR Package, Auth  (0) 2026.06.10
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Router v7 - clientLoader, HydrateFallback  (0) 2026.05.29
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Router v7 - prefetch  (1) 2026.05.29
'๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Email
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - Cloudflared
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - Supabase SSR Package, Auth
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Router v7 - clientLoader, HydrateFallback
j2yonghwa
j2yonghwa
Trying to be a fullstack developer ๐Ÿš€
  • j2yonghwa
    j2yonghwa
    j2yonghwa
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (179)
      • โฐ Daily WakaTime (1)
      • ๐Ÿ–๏ธ ๋…ธ๋งˆ๋“œ์ฝ”๋” (2)
      • ๐Ÿบ Dev Setup (4)
      • ๐Ÿ”ญ Tech Info (1)
      • ๐Ÿ” Security (1)
      • ๐Ÿšซ Error (1)
      • ๐Ÿค– AI (4)
      • ๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (29)
      • ♣๏ธ Next.js 14 (10)
      • ♠๏ธ Next.js 12 (20)
      • ๐Ÿ›ธ React Native (12)
      • ๐Ÿฆ‹ TypeScript (2)
      • ๐Ÿ Python (2)
      • ๐ŸŒŠ TailwindCSS (4)
      • ๐Ÿงฉ SQL (32)
      • ๐Ÿ’Ž Prisma (5)
      • ๐ŸŒฑ MongoDB (4)
      • ๐ŸŽฏ Redis (1)
      • ๐Ÿงฌ GraphQL (2)
      • ๐Ÿ”ฅ Firebase (7)
      • ๐Ÿ’ธ Third-Party Services (5)
      • ๐Ÿ•ธ๏ธ Web (1)
      • ๐Ÿ† ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (23)
      • ๐Ÿ“™ ๋ชจ๋”ฅ๋‹ค (5)
      • ๐Ÿ“— ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ -JS- (0)
      • ๐Ÿ“˜ ํด๋ฆฐ์ฝ”๋“œ (0)
      • ๐Ÿฏ ๊ฟ€ํŒ ๐Ÿ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • ๊นƒํ—™
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    0๋ ˆ๋ฒจ
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    MySQL
    dev setup
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ž…๋ฌธ
    third-party services
    React Native
    react router
    database
    mongoDB
    API
    Prisma
    Firebase
    Python
    next.js 14
    PostgreSQL
    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    Next.js
    next.js 12
    SQL
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
j2yonghwa
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - React Router v7 - useFetcher
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”