useEmailQueryParam()
Parse an email from a URL.
This is helpful if you want to send a marketing email and include a query
param like ?email=meleerob.io
to pre-fill some input.
import { useEffect } from 'react';import { useRouter } from 'next/router';/*** If `paramName` exists in query string, then call `setEmail()` with the value* and delete it from the URL.*/export default function useEmailQueryParam(paramName: string,setEmail: (email: string) => unknown) {const router = useRouter();useEffect(() => {if ('URLSearchParams' in window) {const { search, pathname } = window.location;const params = new URLSearchParams(search);const email = params.get(paramName);if (email) {setEmail(email);params.delete(paramName);const newSearch = params.toString();const newAsPath = pathname + (newSearch ? `?${newSearch}` : '');const newPathname =router.pathname + (newSearch ? `?${newSearch}` : '');history.replaceState({ url: newPathname, as: newAsPath, options: { shallow: true } },'',newAsPath);}}}, [setEmail, router.pathname, paramName]);}