Примеры использования
Узнайте, как использовать Form Guardian в реальных сценариях. От быстрых примеров до продвинутых рецептов.
📝 Быстрые примеры
Простые примеры для начала:
🎯 Распространенные паттерны
Часто используемые паттерны:
🔥 Продвинутые рецепты
Сложные сценарии и решения:
Базовая контактная форма
import { useFormAutosave } from '@form-guardian/react';
function ContactForm() {
const { formRef, hasDraft, clearDraft } = useFormAutosave('contact-form', {
autoRestore: true,
});
return (
<form ref={formRef} onSubmit={async (e) => {
e.preventDefault();
await clearDraft();
// Отправка...
}}>
{hasDraft && <div>Найден черновик!</div>}
<input name="name" placeholder="Имя" />
<input name="email" type="email" placeholder="Email" />
<textarea name="message" placeholder="Сообщение" />
<button type="submit">Отправить</button>
</form>
);
}
Форма регистрации
import { useForm } from 'react-hook-form';
import { useFormAutosave } from '@form-guardian/react';
import { useEffect } from 'react';
function RegistrationForm() {
const { register, handleSubmit, setValue, getValues, watch } = useForm();
const { formRef, restoreValues, clearDraft, saveValues } = useFormAutosave(
'registration',
{ autoRestore: false }
);
useEffect(() => {
restoreValues(setValue, getValues);
}, []);
useEffect(() => {
const subscription = watch(() => saveValues());
return () => subscription.unsubscribe();
}, [watch]);
return (
<form ref={formRef} onSubmit={handleSubmit(async (data) => {
await clearDraft();
// Регистрация пользователя...
})}>
<input {...register('username')} placeholder="Имя пользователя" />
<input {...register('email')} type="email" placeholder="Email" />
<input {...register('password')} type="password" placeholder="Пароль" />
<button type="submit">Зарегистрироваться</button>
</form>
);
}
Форма опроса
<script type="module">
import { attachFormAutosave } from '@form-guardian/dom';
const form = document.getElementById('survey-form');
const autosave = attachFormAutosave({
formId: 'survey-2024',
root: form,
autoRestore: true,
ttl: { days: 30 }, // Черновики опроса истекают через 30 дней
});
form.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
await fetch('/api/survey', {
method: 'POST',
body: formData,
});
await autosave.clear();
alert('Спасибо за заполнение опроса!');
});
</script>
<form id="survey-form">
<fieldset>
<legend>Вопрос 1</legend>
<input type="radio" name="q1" value="yes" id="q1-yes">
<label for="q1-yes">Да</label>
<input type="radio" name="q1" value="no" id="q1-no">
<label for="q1-no">Нет</label>
</fieldset>
<fieldset>
<legend>Вопрос 2</legend>
<textarea name="q2" rows="4"></textarea>
</fieldset>
<button type="submit">Отправить опрос</button>
</form>
Следующие шаги
- Изучите подробные рецепты
- Посмотрите руководства для фреймворков
- Узнайте лучшие практики