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

工单列表分页与搜索异常:URL参数q显示为[object Object]

问题分析与解决方法

问题根源

createAsyncThunk的payload creator函数(即你写的async (page, query) => {...})仅接受一个参数,第二个参数是Redux的thunkAPI对象,并非你传入的query值。

你调用dispatch(getAllTicketsAsync(page, query))时,只有第一个参数page会被传递给payload creator,而query参数位置实际拿到的是thunkAPI对象。当这个对象被拼接到URL中时,就会被转译为[object%20Object]。

修复步骤

1. 修改工单列表页面的参数传递方式

将page和query包装成一个对象传入:

const [query, setQuery] = useState("");

function handleSearch(e) {
  console.log(e.target.value);
  setQuery(e.target.value);
}
useEffect(() => {
  dispatch(getAllTicketsAsync({ page, query }));
}, [page, query]);

2. 更新Ticket Slice中的createAsyncThunk逻辑

解构传入的对象参数,正确获取page和query:

export const getAllTicketsAsync = createAsyncThunk(
  "tickets/getAllTickets",
  async ({ page, query }) => {
    const response = await getTickets(page, query);
    // 返回值会成为`fulfilled` action的payload
    return response;
  }
);

3. 清理API调用代码的冗余语法

你的API代码末尾多了一个多余的);,需要删除:

export async function getTickets(page, query) {
  const response = await fetch(
    `http://localhost:8080/tickets?_page=${page}&_limit=4&q=${query}`
  );
  const data = await response.json();
  const totalItems = await response.headers.get("X-Total-Count");
  console.log(data);

  return {
    data,
    totalItems: +totalItems,
  };
}
// 移除这里多余的);

完成以上修改后,未输入搜索内容时query会是空字符串,请求URL将符合预期:http://localhost:8080/tickets?_page=1&_limit=4&q=。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:55:53