You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JSON Form Schema Form密码字段显示/隐藏功能实现问询

React JSON Schema Form 密码显示/隐藏切换实现方案

要给密码字段加显示/隐藏切换功能,你需要自定义一个密码Widget来替换默认的password widget,具体实现步骤如下:

1. 自定义带切换功能的密码Widget

创建一个React组件,内部维护密码显示状态,通过切换状态控制输入框的type属性,同时添加切换按钮:

import { useState } from 'react';

const PasswordToggleWidget = ({ value, onChange }) => {
  const [showPassword, setShowPassword] = useState(false);

  const handleToggle = () => {
    setShowPassword(prev => !prev);
  };

  return (
    <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>
      <input
        type={showPassword ? 'text' : 'password'}
        value={value || ''}
        onChange={(e) => onChange(e.target.value)}
        style={{ padding: '4px', flex: 1 }}
      />
      <button
        type="button"
        onClick={handleToggle}
        style={{ padding: '4px 8px', cursor: 'pointer' }}
      >
        {showPassword ? '隐藏' : '显示'}
      </button>
    </div>
  );
};

export default PasswordToggleWidget;

2. 在表单中配置使用自定义Widget

在你的表单配置里,把uiSchema中Password字段的ui:widget指定为这个自定义组件:

import Form from '@rjsf/core';
import PasswordToggleWidget from './PasswordToggleWidget';

// 表单Schema
const schema = {
  type: 'object',
  properties: {
    Password: {
      type: 'string',
      title: '密码',
      minLength: 6
    }
  },
  required: ['Password']
};

// UI Schema配置
const uiSchema = {
  Password: {
    'ui:widget': PasswordToggleWidget
  }
};

// 表单组件
const MyForm = () => {
  const handleSubmit = ({ formData }) => {
    console.log('提交的数据:', formData);
  };

  return (
    <Form
      schema={schema}
      uiSchema={uiSchema}
      onSubmit={handleSubmit}
    />
  );
};

export default MyForm;

3. 可选优化(增强体验)

  • 替换为图标按钮:如果使用图标库(如React Icons),可以把文字按钮换成图标,更美观:
    import { FaEye, FaEyeSlash } from 'react-icons/fa';
    
    // 按钮部分替换为:
    <button 
      type="button" 
      onClick={handleToggle} 
      style={{ background: 'none', border: 'none', cursor: 'pointer' }}
    >
      {showPassword ? <FaEyeSlash /> : <FaEye />}
    </button>
    
  • 自定义样式:可以通过ui:options传递样式参数,让组件更灵活适配你的项目风格。

内容的提问来源于stack exchange,提问作者Gethziyaljoyce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:52:15