useSubmitForm
Функция, которая упрощает отправку данных с формы.
Функция используется как useFetch, но возвращает методы для работы с отправкой формы.
Возвращаемые методы
isLoading- Находится ли форма в состоянии загрузки (по умолчанию false).isSent- Отправлена ли форма (по умолчанию false).sendRequest- функция для отправки формы.
INFO
- На запрос, состояние загрузки (переменная
isLoading) устанавливается вtrue. - Если на попытку запроса, либо при попытке получения ответа произошла ошибка, то состояние загрузки меняется в
falseи пользователю выводится сообщение об ошибке через оповещение. - Если пришёл ответ, то состояние загрузки меняется в
false, состояние отправки (переменнаяisSent) на три секунды устанавливается вtrue, после чего возвращается в обратно вfalse. Все заполненные данные в форме очищаются спустя три секунды.
WARNING
- Функция
sendRequestобязательно должна передаваться как обработчик событияsubmitу формы, которое вызывается у формы, когда произошёл клик поbuttonлибоinput, тип которого равняетсяsubmit. - У всех
inputвнутри формы должен обязательно присутствовать аттрибутname. Название аттрибута будет использовано в качестве ключа передаваемого объекта.
Параметры
url-URLдля запросаoptions- параметры запроса. Состоит из параметровuseFetchи дополнительных параметров.
Дополнительные параметры options
auth- использовать ли авторизацию.isFormData- Является ли тип контентаmultipart/form-data(по умолчанию форма отправляется в форматеJSON).onRequest- Функция, вызываемая при запросе.onResponse- Функция, вызываемая при успешно полученном ответе спустя три секунды.submitFormBody- Объект, который будет передан вbodyформы.
Использование
ts
const { sendRequest, isLoading, isSent } = useSubmitForm("/mail/faq/", {
baseURL: useRuntimeConfig().public.apiBase
})С дополнительными параметрами
ts
const { sendRequest, isLoading, isSent } = useSubmitForm("faq", {
auth: true,
body: {
requestUrl: location.href,
},
isFormData: true,
onResponse() {
// do something on response
},
onRequest() {
// do something on request
},
})Пример формы
html
<form @submit.prevent="sendRequest">
<input type="text" name="name" />
<input type="text" name="phone" />
<button type="submit">
<span v-if="isLoading">Выполняется отправка формы</span>
<span v-else-if="isSent">Форма успешно отправлена</span>
<span v-else>Отправить форму</span>
</button>
</form>