javascript 当Redux-Toolkit中的第二个条目是AsyncThunk时,我将其放入{}中,并在控制台中获得未定义的值

2ul0zpep  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(59)
export const addToBasket = createAsyncThunk(
  "newBasket/addToBasket",
  async (id, { cart }) => {
    return axios
      .get("https://run.mocky.io/v3/04fe3f95-0267-4ab4-a61b-a5f250151459")
      .then((res) => {
        console.log(cart); ---> undefined

        let data = res.data;
        data.map((item) => {
          if (item.id == id) {
            console.log(item);
            cart.push(item);
          }
        });
        return cart;
      });
  }
);

字符串
在我发布的这段代码中,我没有想到我的BJRC函数的第二个输入的值是未定义的。

slwdgvem

slwdgvem1#

createAsyncThunk payload creator函数传递两个参数,第一个是传递给调度操作的单个参数值,第二个是thunkApi对象。
重构你的代码,这样你就可以在传递给payload creator的对象中传递idcart。* 不要 * 改变传递的cart数组,创建新的数组引用并更新它们。将async/await和Promise链混合使用也是一种反模式,因此,将GET请求结果重写为await,并通过特定的id值附加过滤后的响应数据。

export const addToBasket = createAsyncThunk(
  "newBasket/addToBasket",
  async ({ cart = [], id }, thunkApi) => {
    try {
      const { data = [] } = await axios.get("....");
    
      return cart.concat(...data.filter(item => item.id === id));
    } catch(error) {
      return thunkApi.rejectWithValue(error);
    }
  }
);

字符串
使用方法:

try {
  const newCart = await dispatch(addToBasket({ id, cart })).unwrap();
  ...
} catch(error) {
  ...
}

相关问题