You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React过滤后数据丢失:二次过滤无返回结果的技术求助

React过滤功能重复执行无结果的问题解决

问题根源

你当前的实现直接用过滤后的结果覆盖了filteredList状态。第一次过滤后,filteredList已经是原始数据的子集,后续再执行过滤时,只能基于这个子集继续筛选,多次操作后就会出现无数据返回的情况。

修正方案

需要单独维护一份完整的原始数据状态,每次过滤都基于原始数据进行,而不是已过滤后的结果。

修改后的代码示例

const [originalList, setOriginalList] = useState([]); // 保存完整原始数据
const [filteredList, setFilteredList] = useState([]);
const [searchquery, setSearchquery] = useState("");
const [isLoaded, setIsLoaded] = useState(false);
const [error, setError] = useState(null);

useEffect(() => {
  fetch("api/device/getall")
    .then((res) => res.json())
    .then(
      (result) => {
        setIsLoaded(true);
        setOriginalList(result); // 存入原始数据
        setFilteredList(result); // 初始化过滤列表为原始数据
      },
      (error) => {
        setIsLoaded(true);
        setError(error);
      }
    );
}, []);

const FilterSearchQuery = () => {
  // 基于原始数据过滤,而非已过滤的列表
  return originalList.filter((item) =>
    item.deviceName
      .toString()
      .toLowerCase()
      .includes(searchquery.toLowerCase())
  );
};

useEffect(() => {
  // 每次搜索词变化时,基于原始数据重新过滤
  const filteredData = FilterSearchQuery();
  setFilteredList(filteredData);
}, [searchquery]);

额外修正点

  1. 移除了FilterSearchQuery函数中多余的||语法错误
  2. 用更直观的includes()替代indexOf() > -1,逻辑保持一致但可读性更强

内容的提问来源于stack exchange,提问作者Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:10:42