当前位置:首页 > 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中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…