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

搜索框输入无过滤结果求助:API未触发重新请求

问题排查与修复

核心问题1:API请求未随搜索值更新触发

你的第一个useEffect依赖数组是[],这意味着它只会在组件首次挂载时执行一次。后续value变化时,不会重新发起API请求,自然拿不到新数据。

核心问题2:未使用过滤后的数据渲染

你在渲染时传给<Postsabc>的是原始的data数组,而不是过滤后的filteredPosts,所以就算过滤逻辑生效,页面也不会展示过滤结果。

修复后的代码

const Posts = ({ value }) => {
  const [filteredPosts, setFilteredPosts] = useState([]);
  const [data, setData] = useState([]);

  // 修改:将value加入依赖数组,value变化时重新请求API
  useEffect(() => {
    axios.get(`${process.env.BASE_URL}/search?q=${value}`).then(res=>{
      console.log(res.data.posts);
      setData(res.data.posts);
    });
  }, [value]) // 这里添加value作为依赖

  useEffect(() => {
    setFilteredPosts(data?.filter(post => post.title.toLowerCase().includes(value.toLowerCase())));
  }, [value, data]);

  return (
    <div>
      {/* 修改:传递filteredPosts给Postsabc组件 */}
      {data?.length > 0 && filteredPosts &&  
        <Postsabc posts={filteredPosts} />
      }
    </div>
  );
};

export default Posts;

额外优化建议

  • 给API请求添加防抖逻辑,避免输入过程中频繁发起请求(可通过setTimeout和clearTimeout实现)
  • 补充请求错误捕获,比如在axios.get后添加.catch()处理异常,避免请求失败导致页面无响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:37:39