---
title: AppProxyForm
description: >-
  Sets up a Remix &lt;Form&gt; component that works when rendered behind an app
  proxy.
api_version: v2
source_url:
  html: >-
    https://shopify.dev/docs/api/shopify-app-remix/v2/app-proxy-components/appproxyform
  md: >-
    https://shopify.dev/docs/api/shopify-app-remix/v2/app-proxy-components/appproxyform.md
api_name: shopify-app-remix
---

# AppProxyForm

Sets up a Remix `<Form>` component that works when rendered behind an app proxy.

Supports any properties accepted by the `<Form>` component.

Examples

### Examples

* ####

  ##### Description

  Use an \`AppProxyForm\` within an \`AppProxy\` to create a form.

  ##### /app/routes/\*\*\\/\*.ts

  ```ts
  import {
    AppProxyProvider,
    AppProxyForm,
  } from "@shopify/shopify-app-remix/react";
  import { authenticate } from "~/shopify.server";

  export async function loader({ request }) {
    await authenticate.public.appProxy(request);

    return json({ appUrl: process.env.SHOPIFY_APP_URL });
  }

  export async function action({ request }) {
    await authenticate.public.appProxy(request);

    const formData = await request.formData();
    const field = formData.get("field")?.toString();

    // Perform actions
    if (field) {
      console.log("Field:", field);
    }

    // Return JSON to the client
    return json({ message: "Success!" });
  }

  export default function App() {
    const { appUrl } = useLoaderData();
    const data = useActionData();

    return (
      <AppProxyProvider appUrl={appUrl}>
        <AppProxyForm action="/">
          <input type="text" name="field" defaultValue={data?.field} />

          <input type="submit" name="Submit" />
        </AppProxyForm>
      </AppProxyProvider>
    );
  }
  ```

***

## Related

[Authenticating app proxy requests. - authenticate.public.appProxy](https://shopify.dev/docs/api/shopify-app-remix/v2/authenticate/public/app-proxy)

[Enable JavaScript in pages loaded through app proxies. - AppProxyProvider](https://shopify.dev/docs/api/shopify-app-remix/v2/entrypoints/appproxyprovider)

***
