当前位置:首页 > React

react如何写多条件搜索功能

2026-01-26 03:52:22React

实现多条件搜索功能

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

使用useState管理搜索条件

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

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可能更合适:

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共享搜索状态

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

react如何写多条件搜索功能

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中实现搜索功能通常需要结合v-model绑定输入框数据,并通过计算属性或方法对数据进行过滤匹配。核心逻辑包括监听用户输入、过滤数据列表以及实时渲染结果。 使用计算属性…

vue实现多条回复展开

vue实现多条回复展开

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

vue实现分页搜索功能

vue实现分页搜索功能

实现分页搜索功能 在Vue中实现分页搜索功能通常需要结合前端分页逻辑和后端API(或模拟数据)。以下是一个完整的实现方案: 基础数据准备 创建Vue组件时定义必要的数据属性: data() {…

vue实现模糊搜索功能

vue实现模糊搜索功能

实现模糊搜索的基本思路 在Vue中实现模糊搜索功能通常需要结合输入框的事件监听、数据过滤以及实时展示。核心是利用JavaScript的字符串方法或正则表达式对数据进行匹配筛选。 使用计算属性实现模糊…

Vue实现淘宝搜索功能

Vue实现淘宝搜索功能

Vue实现淘宝搜索功能的关键步骤 搭建Vue项目结构 使用Vue CLI创建项目,安装必要依赖如vue-router、axios。创建搜索组件Search.vue,商品列表组件GoodsList.vu…

php实现音乐搜索功能

php实现音乐搜索功能

数据库设计 音乐搜索功能需要存储歌曲的基本信息,例如歌曲名称、歌手、专辑、时长等。创建一个MySQL数据库表来存储这些信息。 CREATE TABLE songs ( id INT AUTO…