当前位置:首页 > React

react如何写多条件搜索功能

2026-01-26 03:52:22React

实现多条件搜索功能

在React中实现多条件搜索功能,通常需要结合状态管理和筛选逻辑。以下是几种常见实现方式:

使用useState管理搜索条件

通过useState管理多个搜索条件,并在渲染时进行筛选:

react如何写多条件搜索功能

const [searchTerm, setSearchTerm] = useState({
  name: '',
  age: '',
  status: ''
});

const filteredData = originalData.filter(item => {
  return (
    item.name.toLowerCase().includes(searchTerm.name.toLowerCase()) &&
    (searchTerm.age === '' || item.age === parseInt(searchTerm.age)) &&
    (searchTerm.status === '' || item.status === searchTerm.status)
  );
});

const handleInputChange = (e) => {
  const { name, value } = e.target;
  setSearchTerm(prev => ({ ...prev, [name]: value }));
};

使用useReducer管理复杂状态

当搜索条件较复杂时,useReducer可能更合适:

react如何写多条件搜索功能

const searchReducer = (state, action) => {
  switch (action.type) {
    case 'UPDATE_FIELD':
      return { ...state, [action.field]: action.value };
    case 'RESET':
      return initialState;
    default:
      return state;
  }
};

const [searchState, dispatch] = useReducer(searchReducer, initialState);

结合防抖优化性能

对于频繁触发的搜索,可添加防抖功能:

import { debounce } from 'lodash';

const debouncedSearch = debounce(searchTerm => {
  // 执行搜索逻辑
}, 300);

const handleSearchChange = (e) => {
  debouncedSearch(e.target.value);
};

使用Context共享搜索状态

当需要在多个组件间共享搜索状态时:

const SearchContext = createContext();

const SearchProvider = ({ children }) => {
  const [searchParams, setSearchParams] = useState({});
  // ...其他逻辑

  return (
    <SearchContext.Provider value={{ searchParams, setSearchParams }}>
      {children}
    </SearchContext.Provider>
  );
};

完整组件示例

function SearchComponent({ data }) {
  const [filters, setFilters] = useState({
    text: '',
    category: '',
    minPrice: '',
    maxPrice: ''
  });

  const handleFilterChange = (e) => {
    const { name, value } = e.target;
    setFilters({ ...filters, [name]: value });
  };

  const filteredItems = data.filter(item => {
    return (
      item.name.toLowerCase().includes(filters.text.toLowerCase()) &&
      (filters.category === '' || item.category === filters.category) &&
      (filters.minPrice === '' || item.price >= Number(filters.minPrice)) &&
      (filters.maxPrice === '' || item.price <= Number(filters.maxPrice))
    );
  });

  return (
    <div>
      <input
        type="text"
        name="text"
        value={filters.text}
        onChange={handleFilterChange}
        placeholder="Search by name"
      />

      <select
        name="category"
        value={filters.category}
        onChange={handleFilterChange}
      >
        <option value="">All Categories</option>
        <option value="electronics">Electronics</option>
        <option value="clothing">Clothing</option>
      </select>

      <input
        type="number"
        name="minPrice"
        value={filters.minPrice}
        onChange={handleFilterChange}
        placeholder="Min price"
      />

      <input
        type="number"
        name="maxPrice"
        value={filters.maxPrice}
        onChange={handleFilterChange}
        placeholder="Max price"
      />

      <ul>
        {filteredItems.map(item => (
          <li key={item.id}>{item.name} - ${item.price}</li>
        ))}
      </ul>
    </div>
  );
}

注意事项

确保对数字类型的条件进行适当类型转换 对于大型数据集,考虑分页或虚拟滚动 空值处理要合理,避免意外过滤 性能敏感场景可使用useMemo优化过滤计算

分享给朋友:

相关文章

vue搜索功能实现

vue搜索功能实现

Vue 搜索功能实现 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 绑定输入框的值到 Vue 实例的数据属性,监听用户输入变化: <te…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query…

vue 实现搜索功能

vue 实现搜索功能

实现搜索功能的基本思路 在Vue中实现搜索功能通常涉及以下几个核心步骤:监听用户输入、过滤数据列表、动态更新视图。以下是具体实现方法。 监听用户输入 使用v-model双向绑定搜索框的输入值,实时获…

vue实现多条件查询

vue实现多条件查询

Vue 实现多条件查询的方法 数据绑定与表单设计 在 Vue 中实现多条件查询,通常需要结合 v-model 实现表单数据的双向绑定。例如,创建一个包含多个输入条件的表单: <template…

vue前端搜索功能实现

vue前端搜索功能实现

实现Vue前端搜索功能的方法 双向绑定搜索关键词 在Vue组件中使用v-model绑定搜索输入框,实时获取用户输入的关键词。这种方法适用于简单的本地数据过滤。 <template>…

vue实现多条回复展开

vue实现多条回复展开

实现多条回复展开功能 在Vue中实现多条回复展开功能,可以通过v-for指令遍历回复列表,结合v-show或v-if控制每条回复的显示状态。以下是一个完整的实现方案: 基础实现代码 <tem…