首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux:组合reducers

Redux:组合reducers
EN

Stack Overflow用户
提问于 2021-11-16 03:13:04
回答 2查看 236关注 0票数 1

我正在遵循Redux网站上的Redux教程,但我在使用联合减速器时遇到了困难。如果我不使用组合缩减器来运行我的代码,它会工作得很好。只要我把单个减速器放入组合减速器的功能中。我得到了这个:错误:"reducer“是一个必需的参数,并且必须是一个函数或可以传递给combineReducers的函数的对象。我做错了什么?

以下是使用联合减速器之前的存储:

代码语言:javascript
复制
import { configureStore } from "@reduxjs/toolkit";
import CoinsAllReducer from "./slices/CoinsAll";
export const store = configureStore({
reducer: {
   coinsAll: CoinsAllReducer,
  },
});

这是切片:

代码语言:javascript
复制
import axios from "axios";
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";

const initialState = {
  coinsAll: [],
  status: "idle",
  error: null,
};

export const fetchAllCoins = createAsyncThunk(
  "coinsAll/fetchAllCoins",
  async () => {
    const res = await axios.get(
      `https://api.coingecko.com/api/v3/coins/markets/?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=false`
    );
    return res.data;
  }
);

export const coinsAll = createSlice({
  name: "coinsAll",
  initialState,
  reducers: {},
  extraReducers(builder) {
    builder
      .addCase(fetchAllCoins.pending, (state) => {
        state.status = "loading";
      })
      .addCase(fetchAllCoins.fulfilled, (state, action) => {
        state.status = "succeeded";
        state.coinsAll = action.payload;
      })
      .addCase(fetchAllCoins.rejected, (state, action) => {
        state.status = "failed";
        state.error = action.error.message;
      });
  },
});

export const selectCoinsAll = (state) => state.coinsAll.coinsAll;
export const selectStatus = (state) => state.coinsAll.status;
export default coinsAll.reducer;

上面的代码工作,并从端点获取数据。

以下是修改为使用组合reducer的存储:

代码语言:javascript
复制
import { configureStore } from "@reduxjs/toolkit";
import reducer from "./rootReducer";

export const store = configureStore(reducer);

下面是rootReducer:

代码语言:javascript
复制
import { combineReducers } from "redux";
import coinsAllReducer from "./slices/coinsAll";

const reducer = combineReducers({
  coinsAll: coinsAllReducer,
});

export default reducer;

我没有改变切片中的任何东西。任何帮助都会很感谢,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-16 03:19:36

configureStore接受一个带有reducer键的对象。

它应该是

代码语言:javascript
复制
export const store = configureStore({
  reducer, // <-- object shorthand for the imported root reducer
  // other configurations, etc...
});
票数 0
EN

Stack Overflow用户

发布于 2021-11-16 03:31:45

您必须将configuration对象内部的组合reducer传递给configureStore方法

代码语言:javascript
复制
export const store = configureStore({
  reducer:combinedReducer
});

因此,更新后的代码应该是

代码语言:javascript
复制
import { configureStore } from "@reduxjs/toolkit";
import reducer from "./rootReducer";

export const store = configureStore({reducer:reducer});

由于key和value是相同的,所以您可以简单地使用

代码语言:javascript
复制
import { configureStore } from "@reduxjs/toolkit";
import reducer from "./rootReducer";

export const store = configureStore({reducer});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69983347

复制
相关文章

相似问题

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