因此,我已经看过关于如何创建一个模式:https://www.youtube.com/watch?v=9DwGahSqcEc的这个伟大的教程。
我让它发挥作用了。但问题是,视频中的人在同一个地方创建了按钮和模式,然后在他的App.js中称之为<Modal />。
但是在我的例子中,我在主导航栏中有一个按钮,当我点击这个按钮时,模态会在导航栏内打开,这不是最优的。
我尝试过很多事情,但遗憾的是,我无法将按钮从模态组件中分离出来,因此按钮调用了导航栏之外的函数。
模态组件如下所示:
import React, { useState } from "react";
export default function Modal() {
const [modal, setModal] = useState(false);
const toggleModal = () => {
setModal(!modal);
};
if (modal) {
document.body.classList.add("active-modal");
} else {
document.body.classList.remove("active-modal");
}
return (
<>
<button
onClick={toggleModal}
className="btn-modal"
class="block text-gray-900 dark:text-white font-bold rounded-lg text-sm px-5 py-2 text-center"
type="button"
>
Login
</button>
{modal && (
<div class="relative px-4 w-full max-w-md h-full md:h-auto">
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<div class="flex justify-end p-2">
<button
className="close-modal"
onClick={toggleModal}
type="button"
class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-800 dark:hover:text-white"
>
<svg
class="w-5 h-5"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill-rule="evenodd"
d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
clip-rule="evenodd"
></path>
</svg>
</button>
</div>
<form
class="px-6 pb-4 space-y-6 lg:px-8 sm:pb-6 xl:pb-8"
action="#"
>
<h3 class="text-xl font-medium text-gray-900 dark:text-white">
Sign in to our platform
</h3>
<div>
<label
for="email"
class="block mb-2 text-sm font-medium text-gray-900 dark:text-gray-300"
>
Your email
</label>
<input
type="email"
name="email"
id="email"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
placeholder="name@company.com"
required
></input>
</div>
<div>
<label
for="password"
class="block mb-2 text-sm font-medium text-gray-900 dark:text-gray-300"
>
Your password
</label>
<input
type="password"
name="password"
id="password"
placeholder="••••••••"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
required
></input>
</div>
<div class="flex justify-between">
<div class="flex items-start">
<div class="flex items-center h-5">
<input
id="remember"
aria-describedby="remember"
type="checkbox"
class="w-4 h-4 bg-gray-50 rounded border border-gray-300 focus:ring-3 focus:ring-blue-300 dark:bg-gray-600 dark:border-gray-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800"
required
></input>
</div>
<div class="ml-3 text-sm">
<label
for="remember"
class="font-medium text-gray-900 dark:text-gray-300"
>
Remember me
</label>
</div>
</div>
<a
href="#"
class="text-sm text-blue-700 hover:underline dark:text-blue-500"
>
Lost Password?
</a>
</div>
<button
type="submit"
class="w-full text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"
>
Login to your account
</button>
<div class="text-sm font-medium text-gray-500 dark:text-gray-300">
Not registered?{" "}
<a
href="#"
class="text-blue-700 hover:underline dark:text-blue-500"
>
Create account
</a>
</div>
</form>
</div>
</div>
)}
</>
);
}https://stackoverflow.com/questions/71541696
复制相似问题