发布于 2026-01-06 1 阅读
0

在 React Hooks 中通过切换按钮显示/隐藏密码

在 React Hooks 中通过切换按钮显示/隐藏密码

构建注册/登录表单时,如果能实现用户查看当前输入值的功能就太好了。用 React 实现起来非常简单,让我们一起来看看吧。

npm i react-hook-form
Enter fullscreen mode Exit fullscreen mode

我们将安装react-hook-form来进行一些基本的验证。并使用Font Awesome 图标来添加一些漂亮的眼睛图标。

npm i --save @fortawesome/fontawesome-svg-core
npm i --save @fortawesome/free-solid-svg-icons
npm i --save @fortawesome/react-fontawesome
Enter fullscreen mode Exit fullscreen mode

现在我们来创建一个组件,一个简单的表单,包含两个输入框和一个提交按钮。

import React from "react";
import { useForm } from "react-hook-form";
import "./styles.css";

import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faEye } from "@fortawesome/free-solid-svg-icons";
const eye = <FontAwesomeIcon icon={faEye} />;

export default function App() {
  const { register, handleSubmit } = useForm();
  const onSubmit = data => {
    console.log(data);
  };

  return (
    <div className="App">
      <input
        name="username"
        type="text"
        placeholder="Username"
        ref={register({ required: "This is required." })}
      />
      <div className="pass-wrapper">
        <input
          placeholder="Password"
          name="password"
          type="password"
          ref={register({ required: "This is required." })}
        />
        <i>{eye}</i>
      </div>
      <button type="submit" onClick={handleSubmit(onSubmit)}>
        Submit
      </button>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

并添加一些 CSS,以获得更美观的外观。

.App {
  display: flex;
  flex-direction: column;
  text-align: center;
  justify-items: center;
  font-size: 22px;
  max-width: 500px;
  min-height: 672px;
  margin: 0 auto;
  border-radius: 25px;
  color: white;
  background-color: rgba(0, 0, 0, 0.5);
}

.App > input {
  margin-top: 200px;
}

input {
  margin: 0 auto;
  background-color: black;
  opacity: 50%;
  color: white;
  margin-top: 10px;
  width: 300px;
  height: 59px;
  font-size: 22px;
  margin-bottom: 14px;
  max-width: 527px;
  padding: 0 10%;
}

.pass-wrapper {
  position: relative;
  display: flex;
  margin-bottom: 14px;
}

i {
  position: absolute;
  top: 38%;
  right: 16%;
}
i:hover {
  color: #00fcb6;
  cursor: pointer;
}

button {
  width: 300px;
  height: 50px;
  margin: 0 auto;
}

Enter fullscreen mode Exit fullscreen mode

组件现在看起来像这样

替代文字

现在让我们添加一些布尔值状态来跟踪当前密码字段视图

const [passwordShown, setPasswordShown] = useState(false);
Enter fullscreen mode Exit fullscreen mode

以及切换值的功能

  const togglePasswordVisiblity = () => {
    setPasswordShown(passwordShown ? false : true);
  };
Enter fullscreen mode Exit fullscreen mode

让我们给眼睛图标添加 onClick 事件处理程序,顺便说一下,你可以在项目中使用任何其他图标或按钮来实现此功能。

<i onClick={togglePasswordVisiblity}>{eye}</i>
Enter fullscreen mode Exit fullscreen mode

最后,我们将根据应用程序的当前状态来更改输入类型。

 <input
             ...
              type={passwordShown ? "text" : "password"}
             ...
            />
Enter fullscreen mode Exit fullscreen mode

好了,现在我们可以点击眼睛图标来更改当前密码占位符的显示方式。如果您想查看所有代码,请点击此 CodeSandbox 链接:显示/隐藏密码切换开关。
如果本教程对您有帮助,请点个赞!

文章来源:https://dev.to/detoner777/show-hide-password-on-toggle-in-react-hooks-1lph