next.js 如何用链接触发模态

628mspwn  于 2023-05-06  发布在  其他
关注(0)|答案(2)|浏览(143)

我的页面(Next.js)上有一个模态,它是通过单击按钮触发的:

<button type='button' onClick={() => setOpen(true)}>

模态:

<Modal
  id='demo'
  show={isOpen}
  onClose={() => setOpen(false)}
>

默认情况下,模态是隐藏的。我想给客户发一个链接。当客户端点击链接时,他们将被带到打开了模态的页面。有可能做到这一点吗?怎么做?非常感谢。
我试着把id放在URL中,如下所示:https://example.com/contact#demo,但没有运气。我正在考虑使用查询标记(?),但不知道它是如何工作的。

xghobddn

xghobddn1#

如果NextJS使用react-dom,则可以从react-router-dom使用useSearchParams

import { useSearchParams } from 'react-router-dom'
...
....
const MyComponent = () => {
  const [searchParams, setSearchParams] = useSearchParams();
  const q = searchParams.get('demo')

  return (
  )
}
dhxwm5r4

dhxwm5r42#

你可以检测到referrer,它告诉你客户端是从哪个链接导航到你的页面的。你可以定义getServerSideProps

import { GetServerSideProps } from "next";

export const getServerSideProps: GetServerSideProps = async (context) => {
  let referred=false
  //  headers: IncomingHttpHeaders;
  // IncomingHttpHeaders has 'referer'?: string;
  const referrer=context.req.headers.referer
  if (referrer===YOURlINK){
       referred=true
  }
  return { props: {referred:referred} };
};

然后基于referred prop

const referred=props.referred
<Modal
  id='demo'
  // if referred is true, it will show if referred is false, it will look isOpen value
  show={referred || isOpen}
  onClose={() => setOpen(false)}
>

您也可以在客户端处理此问题

const [referred,setReferred]=useState(false)

useEffect(() => {
    const referrer = document.referrer;
    if (referrer !== null) {
      console.log(`I was redirected from ${referrer}`);
    }
   if (referrer===YOURlINK){
       setReferred(true)
   }
  }, []);

使用referred状态值

<Modal
  id='demo'
  show={referred || isOpen}
  onClose={() => setOpen(false)}
>

相关问题