首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux : TypeError: state.favorites.concat不是函数

Redux : TypeError: state.favorites.concat不是函数
EN

Stack Overflow用户
提问于 2022-05-29 04:36:03
回答 1查看 144关注 0票数 0

我正在使用redux工具包,遇到了一个问题,无法将结果推入我声明的数组中。这是我最初的状态:

代码语言:javascript
复制
const initialState = {
  favorites: [],
  isError: false,
  isSuccess: false,
  isLoading: false,
  message: "",
};

在我的应用程序的仪表板中,我想显示我使用useEffect的状态下的收藏夹:

代码语言:javascript
复制
useEffect(() => {
    if (isError) {
      console.log(message);
    }

    if (!user) {
      navigate("/login");
    }

    //dispatch(getFavorites());

    // return () => {
    //   dispatch(reset());
    // };
  }, [user, navigate, isError, message, dispatch]);

当我取消对调度进行注释以获得收藏时,就会出现问题,下面是我服务中的getFavorites:

代码语言:javascript
复制
//Get user favorites
const getFavorites = async (token) => {
  const config = {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  };

  const response = await axios.get(API_URL, config);

  return response.data;
};

下面是我如何创建一个最爱的方法:

代码语言:javascript
复制
const createFavorite = async (favoriteData, token) => {
  const config = {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  };

  var qs = require("qs");

  var data = qs.stringify({
    address: favoriteData.location["address1"],
    phone: favoriteData.display_phone,
    rating: favoriteData.rating.toString(),
    price: favoriteData.price,
  });

  console.log(favoriteData);
  const response = await axios.post(API_URL, data, config);

  return response.data;
};

这是在片文件中发生错误的地方,在这里,我的额外还原器是:

代码语言:javascript
复制
export const favoriteSlice = createSlice({
  name: "favorite",
  initialState,
  reducers: {
    reset: (state) => initialState,
  },
  extraReducers: (builder) => {
    builder
      .addCase(createFavorite.pending, (state) => {
        state.isLoading = true;
      })
      .addCase(createFavorite.fulfilled, (state, action) => {
        state.isLoading = false;
        state.isSuccess = true;
        state.favorites.concat(action.payload);
      })
      .addCase(createFavorite.rejected, (state, action) => {
        state.isLoading = false;
        state.isError = true;
        state.message = action.payload;
      })
      .addCase(getFavorites.pending, (state) => {
        state.isLoading = true;
      })
      .addCase(getFavorites.fulfilled, (state, action) => {
        state.isLoading = false;
        state.isSuccess = true;
        state.favorites = action.payload;
      })
      .addCase(getFavorites.rejected, (state, action) => {
        state.isLoading = false;
        state.isError = true;
        state.message = action.payload;
      });
  },
}); 

错误发生在行: state.favorites.concat(action.payload)

我是否以错误的格式返回数据?我是新的redux和遵循一个教程,所以我不知道如何解决这个问题。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-05-29 05:29:15

.concat()不变异,它返回一个副本,所以您还必须在这里将state.favorites重置为它:

代码语言:javascript
复制
  .addCase(createFavorite.fulfilled, (state, action) => {
    state.isLoading = false;
    state.isSuccess = true;
    state.favorites = state.favorites.concat(action.payload);
  })

至于错误,您的state.favorites似乎要么未定义,要么设置为非数组/字符串值。.concat()只适用于数组或字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72420942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档