\n```\n\n### 8. enctype — тип кодирования\n\n```html\n\n
\n \n \n
\n\n\n
\n \n \n \n
\n\n\n
\n \n \n
\n```\n\n### 9. Target — где открыть результат\n\n```html\n\n
\n \n
\n\n\n
\n \n
\n\n\n
\n \n
\n\n```\n\n### 10. Современный подход: SPA (Single Page Application)\n\nВ современных приложениях часто используется JavaScript вместо стандартного отправления формы:\n\n```jsx\n// React компонент\nimport { useState } from 'react';\n\nexport function LoginForm() {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setLoading(true);\n setError('');\n\n try {\n // Вместо action атрибута используем fetch\n const response = await fetch('/api/login', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password })\n });\n\n const data = await response.json();\n \n if (!response.ok) {\n throw new Error(data.message);\n }\n\n console.log('Login successful:', data);\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n setEmail(e.target.value)}\n required\n />\n setPassword(e.target.value)}\n required\n />\n {error &&
{error}
}\n \n \n );\n}\n```\n\nОбратите внимание: в этом примере форма **не имеет** атрибута `action`. Обработка происходит через JavaScript.\n\n### 11. Next.js Server Actions\n\nВ Next.js 13+ есть встроенная поддержка Server Actions:\n\n```tsx\n// app/page.tsx\n'use server';\n\nexport async function submitForm(formData: FormData) {\n const email = formData.get('email');\n const message = formData.get('message');\n \n // Обработка на сервере\n await saveMessage(email, message);\n}\n\nexport default function Page() {\n return (\n
\n \n
Что такое атрибут action у form? | PrepBro