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

React中useQuery获取数据无法在Kbar UI展示,控制台可打印

问题:useQuery获取的数据无法在Kbar组件UI展示,模拟数组却正常显示

我在React组件中使用useQuery获取数据时遇到问题:数据能通过console.log正常打印,但无法在Kbar搜索组件的UI上展示;当创建模拟数组并映射时,数据却能正常显示。

以下代码无法在UI展示数据:

const gparam = {
  search: {
    type: [{ operator: 'eq', value: 'digital_product' }]
  }
};
export function useSearchActions() {
  const { data: dataKbar } = useQuery(GQL_PAYMENTLINK_KBAR, { variables: gparam });

  const coba = useMemo(() => {
    // const actions = [];
    const actions =
      dataKbar?.getPaymentLinkPage?.items?.map(aya => {
        return {
          id: 'aya.id',
          // parent: parentId.cobaRoot,
          // subtitle:"ah",
          name: aya.name,
          keywords: 'coba',
          section: 'digital produk',
          perform: () => (window.location.pathname = `/digital-product-detail/${aya.id}`)
        };
      }) || [];

    return actions;
  }, []);

}

原因分析

核心问题出在useMemo的依赖数组上:

  • 你给useMemo传了空的依赖数组[],这意味着useMemo只会在组件首次渲染时执行一次,后续即使dataKbar因为useQuery请求完成而更新,useMemo也不会重新计算coba的值。
  • 初始渲染时dataKbar是undefined,所以actions会被赋值为空数组[],后续数据加载完成后,useMemo不重新执行,coba始终是空数组,自然无法在UI上展示。
  • 而模拟数组是静态的,组件渲染时就有值,所以能正常展示。

另外还有一个小问题:你的id字段写的是'aya.id',这是一个固定字符串,不是读取aya.id的实际值,所有生成的action的id都会重复,可能导致Kbar识别异常。

解决方案

修改useMemo的依赖数组,把dataKbar加入进去,同时修正id的赋值:

const gparam = {
  search: {
    type: [{ operator: 'eq', value: 'digital_product' }]
  }
};
export function useSearchActions() {
  const { data: dataKbar } = useQuery(GQL_PAYMENTLINK_KBAR, { variables: gparam });

  const coba = useMemo(() => {
    const actions =
      dataKbar?.getPaymentLinkPage?.items?.map(aya => {
        return {
          id: aya.id, // 修正:去掉引号,读取实际id值
          name: aya.name,
          keywords: 'coba',
          section: 'digital produk',
          perform: () => (window.location.pathname = `/digital-product-detail/${aya.id}`)
        };
      }) || [];

    return actions;
  }, [dataKbar]); // 新增:将dataKbar加入依赖数组
}

这样当dataKbar加载完成更新时,useMemo会重新执行映射逻辑,生成包含真实数据的actions数组,Kbar组件就能拿到最新数据并展示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:05:34