当前位置:首页 > React

react实现input过滤

2026-01-27 00:27:13React

React 实现 Input 过滤的方法

受控组件方式

通过 React 的受控组件机制实现输入过滤。将输入值保存在 state 中,并在 onChange 事件中处理过滤逻辑。

import { useState } from 'react';

function FilteredInput() {
  const [inputValue, setInputValue] = useState('');

  const handleChange = (e) => {
    const value = e.target.value;
    // 过滤非数字字符
    const filteredValue = value.replace(/[^0-9]/g, '');
    setInputValue(filteredValue);
  };

  return (
    <input 
      type="text" 
      value={inputValue} 
      onChange={handleChange} 
    />
  );
}

使用防抖优化

对于频繁的输入过滤,可以添加防抖功能减少处理频率。

import { useState, useEffect } from 'react';

function DebouncedFilter() {
  const [inputValue, setInputValue] = useState('');
  const [filteredValue, setFilteredValue] = useState('');

  useEffect(() => {
    const timer = setTimeout(() => {
      // 过滤特殊字符
      const result = inputValue.replace(/[^a-zA-Z0-9]/g, '');
      setFilteredValue(result);
    }, 500);

    return () => clearTimeout(timer);
  }, [inputValue]);

  return (
    <>
      <input 
        value={inputValue}
        onChange={(e) => setInputValue(e.target.value)}
      />
      <p>过滤后: {filteredValue}</p>
    </>
  );
}

自定义 Hook 封装

将过滤逻辑封装成可复用的自定义 Hook。

function useInputFilter(initialValue, filterRegex) {
  const [value, setValue] = useState(initialValue);

  const handleChange = (e) => {
    const newValue = e.target.value;
    const filtered = newValue.replace(filterRegex, '');
    setValue(filtered);
  };

  return [value, handleChange];
}

// 使用示例
function CustomFilterInput() {
  const [value, onChange] = useInputFilter('', /[^A-Za-z]/g);

  return (
    <input 
      type="text"
      value={value}
      onChange={onChange}
      placeholder="只能输入字母"
    />
  );
}

复杂过滤场景

对于需要保留特定格式的输入(如电话号码),可以使用更复杂的过滤逻辑。

react实现input过滤

function PhoneInput() {
  const [phone, setPhone] = useState('');

  const formatPhone = (value) => {
    // 移除所有非数字字符
    const numbers = value.replace(/\D/g, '');
    // 格式化为 xxx-xxx-xxxx
    if (numbers.length <= 3) return numbers;
    if (numbers.length <= 6) 
      return `${numbers.slice(0, 3)}-${numbers.slice(3)}`;
    return `${numbers.slice(0, 3)}-${numbers.slice(3, 6)}-${numbers.slice(6, 10)}`;
  };

  const handleChange = (e) => {
    setPhone(formatPhone(e.target.value));
  };

  return (
    <input
      type="tel"
      value={phone}
      onChange={handleChange}
      placeholder="123-456-7890"
    />
  );
}

这些方法涵盖了从基础到高级的输入过滤场景,可以根据具体需求选择合适的方式实现。

标签: reactinput
分享给朋友:

相关文章

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…

如何清洁react

如何清洁react

清洁 React 项目的方法 删除未使用的依赖项 运行 npm ls 或 yarn list 检查已安装的依赖项,使用 npm uninstall <package> 或 yarn rem…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…