<SignUp />
component
The <SignUp />
component renders a UI for signing up users. The functionality of the <SignUp />
component is controlled by the instance settings you specify in your Clerk Dashboard(opens in a new tab), such as sign-in and sign-up options and social connections. You can further customize your <SignUp />
component by passing additional properties at the time of rendering.
The <SignUp/>
and <SignIn/>
components cannot render when a user is already signed in, unless the application allows multiple sessions. If a user is already signed in and the application only allows a single session, Clerk will redirect the user to the Home URL instead.
Properties
All props are optional.
Name | Type | Description |
---|---|---|
appearance | Appearance | undefined | Optional object to style your components. Will only affect Clerk Components and not Account Portal pages. |
routing | 'hash' | 'path' | 'virtual' | The routing strategy for your pages. Defaults to 'path' in Next.js and Remix applications. Defaults to hash for all other SDK's. |
path | string | The path where the component is mounted on when routing is set to path . It is ignored in hash- and virtual-based routing.For example: /sign-up . |
signInUrl | string | Full URL or path to the sign in page. Use this property to provide the target of the 'Sign In' link that's rendered. It's recommended to use the environment variable instead. |
signUpFallbackRedirectUrl? | string | The fallback URL to redirect to after the user signs up, if there's no redirect_url in the path already. Defaults to / . It's recommended to use the environment variable instead. |
signUpForceRedirectUrl? | string | If provided, this URL will always be redirected to after the user signs up. It's recommended to use the environment variable instead. |
initialValues | SignUpInitialValues | The values used to prefill the sign-up fields with. |
Usage with frameworks
The following example includes basic implementation of the <SignIn />
component. You can use this as a starting point for your own implementation.
The following example demonstrates how you can use the <SignUp />
component on a public page.
If you would like to create a dedicated /sign-up
page in your Next.js application, check out the dedicated guide..
app/page.tsximport { SignUp, useUser } from "@clerk/nextjs"; export default function Home() { const { user } = useUser(); if (!user) { return <SignUp />; } return <div>Welcome!</div>; }
/src/sign-up/[[...index]].tsximport { SignUp } from "@clerk/clerk-react"; const SignUpPage = () => ( <SignUp path="/sign-up" /> ); export default SignUpPage;
app/routes/sign-up/$.tsximport { SignUp } from "@clerk/remix"; export default function SignUpPage() { return ( <div style={{ border: "2px solid blue", padding: "2rem" }}> <h1>Sign Up route</h1> <SignUp /> </div> ); }
/pages/sign-up.jsimport { SignUp } from "gatsby-plugin-clerk"; export default function SignUpPage() { return ( <div style={{ border: "2px solid blue", padding: "2rem" }}> <h1>Sign Up route</h1> <SignUp path="/sign-up" /> </div> ); }
Usage with JavaScript
The following methods available on an instance of the Clerk
class are used to render and control the <SignUp />
component:
The following examples assume that you have followed the quickstart in order to add Clerk to your JavaScript application.
mountSignUp()
Render the <SignUp />
component to an HTML <div>
element.
function mountSignUp(node: HTMLDivElement, props?: SignUpProps): void;
mountSignUp()
params
Name | Type | Description |
---|---|---|
node | HTMLDivElement (opens in a new tab) | The <div> element used to render in the <SignUp /> component |
props? | SignUpProps | The properties to pass to the <SignUp /> component. |
mountSignUp()
usage
index.tsimport Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); document.getElementById("app").innerHTML = ` <div id="sign-up"></div> `; const signUpDiv = document.getElementById("sign-up"); clerk.mountSignUp(signUpDiv);
index.js<!-- Add a <div id="sign-up"> element to your HTML --> <div id="sign-up"></div> <!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); const signUpDiv = document.getElementById('sign-up'); Clerk.mountSignUp(signUpDiv); }); </script>
unmountSignUp()
Unmount and run cleanup on an existing <SignUp />
component instance.
function unmountSignUp(node: HTMLDivElement): void;
unmountSignUp()
params
Name | Type | Description |
---|---|---|
node | HTMLDivElement (opens in a new tab) | The container <div> element with a rendered <SignUp /> component instance |
unmountSignUp()
usage
index.tsimport Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); document.getElementById("app").innerHTML = ` <div id="sign-up"></div> `; const signUpDiv = document.getElementById("sign-up"); clerk.mountSignUp(signUpDiv); // ... clerk.unmountSignUp(signUpDiv);
index.js<!-- Add a <div id="sign-up"> element to your HTML --> <div id="sign-up"></div> <!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); const signUpDiv = document.getElementById('sign-up'); Clerk.mountSignUp(signUpDiv); // ... Clerk.unmountSignUp(signUpDiv); }); </script>
openSignUp()
Opens the <SignUp />
component as an overlay at the root of your HTML body
element.
function openSignUp(props?: SignUpProps): void;
openSignUp()
params
Name | Type | Description |
---|---|---|
props? | SignUpProps | The properties to pass to the <SignUp /> component |
openSignUp()
usage
index.tsimport Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); clerk.openSignUp();
index.html<!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); Clerk.openSignUp(); }); </script>
closeSignUp()
Closes the sign up overlay.
function closeSignUp(): void;
closeSignUp()
usage
index.tsimport Clerk from '@clerk/clerk-js'; // Initialize Clerk with your Clerk publishable key const clerk = new Clerk('{{pub_key}}'); await clerk.load(); clerk.openSignUp(); // ... clerk.closeSignUp();
index.html<!-- Initialize Clerk with your Clerk Publishable key and Frontend API URL --> <script async crossorigin="anonymous" data-clerk-publishable-key="{{pub_key}}" src="https://{{fapi_url}}/npm/@clerk/clerk-js@latest/dist/clerk.browser.js" type="text/javascript" ></script> <script> window.addEventListener("load", async function () { await Clerk.load(); Clerk.openSignUp(); // ... Clerk.closeSignUp(); }); </script>
Customization
To learn about how to customize Clerk components, see the customization documentation.
Last updated on April 24, 2024