当前位置:首页 > React

react实现input过滤

2026-01-27 00:27:13React

React 实现 Input 过滤的方法

受控组件方式

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

react实现input过滤

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} 
    />
  );
}

使用防抖优化

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

react实现input过滤

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="只能输入字母"
    />
  );
}

复杂过滤场景

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

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

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

react如何更新

react如何更新

更新 React 项目的方法 检查当前 React 版本 在项目根目录的 package.json 文件中查看 react 和 react-dom 的版本号。也可以通过命令行运行以下命令查看: np…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Rea…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…