ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ useFormStatus๋ ๋ฌด์์ธ๊ฐ์?
**useFormStatus**๋ ํผ(form)์ ์ํ๋ฅผ ํ์ธํ๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ React์ ํ ์ด์์.
- ์๋ฅผ ๋ค์ด, "ํผ์ด ์ ์ถ ์ค์ธ์ง", "์๋ฌ๊ฐ ๋ฐ์ํ๋์ง" ๊ฐ์ ์ํ๋ฅผ ํ์ธํ ์ ์์ฃ .
- ์ฃผ๋ก ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋ ์์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ผ์.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ ์ฃผ๋ฌธ ์ํฉ ๐
์ฌ๋ฌ๋ถ์ด ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ์์ ์ฃผ๋ฌธ์ ๋ฐ๋ ์ง์์ด๋ผ๊ณ ์๊ฐํด ๋ณด์ธ์.
- ์ฃผ๋ฌธ ์์
- ์๋์ด ๋ฉ๋ด๋ฅผ ๊ณ ๋ฅด๊ณ ์ฃผ๋ฌธ์ ์์ํด์.
- ์ด๋ **"์ฃผ๋ฌธ์ด ์งํ ์ค์ ๋๋ค"**๋ผ๋ ์ํ๋ฅผ ํ์ธํ ์ ์์ด์.
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ค
- ์ฃผ๋ฐฉ์์ ํ๋ฒ๊ฑฐ๋ฅผ ๋ง๋๋ ๋์ **"์ฃผ๋ฌธ์ด ์ฒ๋ฆฌ ์ค์ด์์"**๋ผ๋ ์ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ์ฃผ๋ฌธ ์๋ฃ
- ํ๋ฒ๊ฑฐ๊ฐ ์์ฑ๋๋ฉด **"์ฃผ๋ฌธ์ด ์๋ฃ๋์์ต๋๋ค!"**๋ผ๊ณ ์๋ ค์ค ์ ์์ฃ .
React์ **useFormStatus**๋ ๋ฐ๋ก ์ด **์ฃผ๋ฌธ ์ํ(์งํ ์ค, ์๋ฃ, ์๋ฌ ๋ฑ)**๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ณด์ฌ์ค ์ ์๊ฒ ๋์์ฃผ๋ ์ญํ ์ด์์.
๐ ๏ธ useFormStatus ์ฌ์ฉ๋ฒ
๊ทธ๋ผ useFormStatus๋ฅผ ์ฝ๋๋ก ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ํจ๊ป ์์๋ณผ๊ฒ์.
React ์๋ฒ ์ก์
์ ์์ ๋ก ๋ณด์ฌ๋๋ฆด๊ฒ์.
1. ์๋ฒ ์ก์ ์ผ๋ก ๋ฐ์ดํฐ ์ ์ถํ๊ธฐ
React ์๋ฒ ์ปดํฌ๋ํธ์์ ํผ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ถํ ๋ useFormStatus๋ฅผ ์ฌ์ฉํ ์ ์์ด์.
์๋ฒ ์ก์ ํจ์ ๋ง๋ค๊ธฐ
'use server';
export async function submitFormAction(formData) {
const name = formData.get('name');
// 2์ด ๋์ ์๋ฒ์์ ์ฒ๋ฆฌ ์ค์ด๋ผ๊ณ ๊ฐ์
await new Promise((resolve) => setTimeout(resolve, 2000));
if (!name) {
throw new Error('์ด๋ฆ์ ์
๋ ฅํด ์ฃผ์ธ์!');
}
console.log('์๋ฒ์ ์ ์ก๋ ๋ฐ์ดํฐ:', name);
}
์ค๋ช :
- submitFormAction ํจ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํด์.
- await๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ด๋ด์ ํผ์ด ์ ์ถ๋๋ ๋์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ํฉ์ ๋ง๋ค์ด ๋ณผ๊ฒ์.
2. useFormStatus๋ฅผ ์ฌ์ฉํ ํผ ์ปดํฌ๋ํธ
์ด์ useFormStatus๋ฅผ ์ฌ์ฉํด์ ํผ ์ํ๋ฅผ ํ์ํด๋ณผ๊ฒ์.
'use client';
import { useFormStatus } from 'react-dom';
import { submitFormAction } from './actions';
function SubmitButton() {
const { pending } = useFormStatus(); // ํผ ์ํ ํ์ธ
return (
<button type="submit" disabled={pending}>
{pending ? '์ ์ถ ์ค...' : '์ ์ถ'}
</button>
);
}
export default function MyForm() {
return (
<form action={submitFormAction}>
<label>
์ด๋ฆ: <input name="name" />
</label>
<SubmitButton />
</form>
);
}
๐ ์ฝ๋ ์ค๋ช
- useFormStatus ํ
- useFormStatus๋ ํผ์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ ํ ์ด์์.
- pending: ํผ์ด ์ ์ถ ์ค์ด๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
- SubmitButton ์ปดํฌ๋ํธ
- useFormStatus๋ฅผ ์ฌ์ฉํด์ ๋ฒํผ์ ์ํ๋ฅผ ๋ณ๊ฒฝํด์.
- ํผ์ด ์ ์ถ ์ค์ด๋ฉด ๋ฒํผ์ **"์ ์ถ ์ค..."**์ด๋ผ๊ณ ํ์ํ๊ณ , ํด๋ฆญ์ ๋นํ์ฑํํฉ๋๋ค.
- action ์์ฑ
- form ํ๊ทธ์ action ์์ฑ์ ์๋ฒ ์ก์ ํจ์ submitFormAction์ ์ฐ๊ฒฐํฉ๋๋ค.
- ํผ์ด ์ ์ถ๋๋ฉด ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฒฐ๊ณผ
- ํผ์ด ์ ์ถ ์ค์ผ ๋ ๋ฒํผ์ ๋นํ์ฑํ๋๊ณ **"์ ์ถ ์ค..."**์ด๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ํ์๋ฉ๋๋ค.
- ์ ์ถ์ด ์๋ฃ๋๋ฉด ๋ฒํผ์ด ๋ค์ ํ์ฑํ๋ผ์.
๐ useFormStatus๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ์
- ์ ์ถ ์ํ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌ
- ํผ์ด ์ ์ถ ์ค์ธ์ง, ์๋ฃ๋๋์ง ์ํ๋ฅผ ๊ฐ๋จํ๊ฒ ํ์ธํ ์ ์์ด์.
- UX(์ฌ์ฉ์ ๊ฒฝํ) ๊ฐ์
- ํผ์ด ์ ์ถ๋๋ ๋์ ๋ฒํผ์ ๋นํ์ฑํํ๊ฑฐ๋ ๋ก๋ฉ ๋ฉ์์ง๋ฅผ ํ์ํด์ ์ฌ์ฉ์์๊ฒ ํผ๋๋ฐฑ์ ์ค ์ ์์ด์.
- ์๋ฒ ์ก์
๊ณผ ํจ๊ป ์ฌ์ฉ
- ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋ ์์ ๊ณผ useFormStatus๋ฅผ ๊ฒฐํฉํ๋ฉด ์๋ฒ์์ ์ํ ๋๊ธฐํ๊ฐ ํจ์ฌ ์ฌ์์ ธ์.
๐ ํ ์ค ์์ฝ
**useFormStatus**๋ ํผ์ด ์ ์ถ ์ค์ธ์ง, ์๋ฃ๋๋์ง ๋ฑ ์ํ๋ฅผ ํ์ธํด์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์๋๋ก ๋์์ฃผ๋ React ํ ์ด์์.
๐ ๋ง๋ฌด๋ฆฌ
React์ **useFormStatus**๋ ํผ์ ์ฌ์ฉํ ๋ **"์ง๊ธ ํผ์ด ์ด๋ค ์ํ์ธ์ง"**๋ฅผ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค ์ ์๋ ๊ธฐ๋ฅ์ด์์.
ํนํ ์๋ฒ ์ก์
๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง์ฃ !
- Total
- Today
- Yesterday
- Store
- state
- useformstatus
- ๋ฐ์ดํฐ์ ์ง
- ๋ฒ ํ
- useinsertioneffect
- usedeferredvalue
- experimental_taintuniquevalue
- useid
- experimental_taintobjectreference
- ์ธ๋ถํฐํธ
- react hook
- dns-prefetch
- useRef
- preconnect
- zustand
- Props
- react dom
- component
- flushsync
- ์ต์ ๋ฐ์ดํฐ
- experimental
- ์ ์ฅ์
- react
- Nextjs
- prefetchdns
- ์ํ๊ด๋ฆฌ
- react dom hook
- finddomnode
- ์คํ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |