---
title: useSubmit
new: true
---
# `useSubmit`
The imperative version of `
);
}
```
This can also be useful if you'd like to automatically sign someone out of your website after a period of inactivity. In this case, we've defined inactivity as the user hasn't navigated to any other pages after 5 minutes.
```tsx lines=[1,10,15]
import { useSubmit, useLocation } from "react-router-dom";
import { useEffect } from "react";
function AdminPage() {
useSessionTimeout();
return
{/* ... */}
;
}
function useSessionTimeout() {
const submit = useSubmit();
const location = useLocation();
useEffect(() => {
const timer = setTimeout(() => {
submit(null, { method: "post", action: "/logout" });
}, 5 * 60_000);
return () => clearTimeout(timer);
}, [submit, location]);
}
```
## Submit target
The first argument to submit accepts many different values.
You can submit any form or form input element:
```tsx
// input element events
submit(event.currentTarget)} />;
// React refs
let ref = useRef();
;
submit(ref.current);
```
You can submit `FormData`:
```tsx
let formData = new FormData();
formData.append("cheese", "gouda");
submit(formData);
```
Or you can submit `URLSearchParams`:
```tsx
let searchParams = new URLSearchParams();
searchParams.append("cheese", "gouda");
submit(searchParams);
```
Or anything that the `URLSearchParams` constructor accepts:
```tsx
submit("cheese=gouda&toasted=yes");
submit([
["cheese", "gouda"],
["toasted", "yes"],
]);
```
The default behavior if you submit a JSON object for a POST submission is to encode the data into `FormData`:
```tsx
submit({ key: "value" }, { method: "post" });
// will serialize into request.formData() in your action
// and will show up on useNavigation().formData during the navigation
```
Or you can opt-into JSON encoding:
```tsx
submit(
{ key: "value" },
{ method: "post", encType: "application/json" }
);
// will serialize into request.json() in your action
// and will show up on useNavigation().json during the navigation
submit('{"key":"value"}', {
method: "post",
encType: "application/json",
});
// will encode into request.json() in your action
// and will show up on useNavigation().json during the navigation
```
Or plain text:
```tsx
submit("value", { method: "post", encType: "text/plain" });
// will serialize into request.text() in your action
// and will show up on useNavigation().text during the navigation
```
## Submit options
The second argument is a set of options that map (mostly) directly to form submission attributes:
```tsx
submit(null, {
method: "post",
action: "/logout",
});
// same as
;
```
[pickingarouter]: ../routers/picking-a-router