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

RTK Query调用报错:尝试解构非可迭代实例问题排查

TypeError:解构非可迭代实例的排查与解决(RTK Query场景)

报错原因

RTK Query的useQuery系列钩子(比如你这里的useLocationQuery)返回的是单一对象,而非数组。你用数组解构语法[getcitycode, { ... }]去解析它,必然触发“尝试解构非可迭代实例”的错误——因为普通对象没有默认迭代器,无法按数组方式解构。

注意:只有RTK Query的useMutation钩子才会返回数组(第一个元素是触发函数,第二个是状态对象),useQuery钩子的所有方法、状态都封装在同一个返回对象中。

解决方案

1. 修正解构方式(核心修复)

将数组解构改为对象解构,把返回对象中的refetch方法重命名为你需要的getcitycode:

// 错误写法
// const [getcitycode, { isLoading, error, data, isSuccess, isError }] = useLocationQuery();

// 正确写法
const { refetch: getcitycode, isLoading, error, data, isSuccess, isError } = useLocationQuery();

2. 调整手动触发逻辑

调用refetch(即重命名后的getcitycode)时,需将查询参数放在query字段中传递:

const getLocationDetails = async () => {
  const queryItems = { latitude: lat, longitude: long };
  await getcitycode({ query: queryItems });
};

3. 优化端点URL拼接(可选)

你的端点定义中URL存在换行空格,可能导致请求异常,建议调整为无空格的拼接方式:

location: builder.query({
  query: (queryItems) => {
    console.log('qitems', queryItems);
    return {
      url: `https://revgeocode.search.hereapi.com/v1/revgeocode?at=${queryItems.latitude},${queryItems.longitude}&lang=en-US&apiKey=apikey`,
      method: 'GET',
    };
  },
});

4. 关闭自动查询(可选)

如果希望组件挂载时不自动触发查询,仅通过getcitycode手动触发,可在调用钩子时添加skip: true参数:

const { refetch: getcitycode, isLoading, error, data, isSuccess, isError } = useLocationQuery({
  skip: true,
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:01:35