redux 为什么createStore可以工作而configureStore不能?

5jdjgkvh  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(219)

我正在使用reactredux创建一个简单的计数器应用程序。
以下是counterSlice.js文件。

import { createSlice } from "@reduxjs/toolkit";

export const counterSlice = createSlice({
  name: "counter",
  initialState: { count: 0 },
  reducers: {
    changeValueBy(state, action) {
      const value = action.payload;
      state["count"] = state["count"] + value;
    }
  }
});

export const { changeValueBy } = counterSlice.actions;

export const selectCount = (state) => state.count;

export default counterSlice.reducer;

以下是app/store.js文件:

import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "../features/counter/counterSlice";

export default configureStore({
  reducer: {
    counter: counterReducer
  }
});

以下是index.js文件:

import App from "./App";
import store from "./app/store";
import { Provider } from "react-redux"

ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>,
  document.getElementById("root")
);

在这种设置下,代码不起作用。(整个代码的格式为this sandbox
但在以下设置下,store可以正常工作。
App.js文件:

import { Counter } from "./features/counter/Counter";
import "./App.css";
import { Provider } from "react-redux";
import { createStore } from "redux";
import counterSlice from "./features/counter/counterSlice";

const store = createStore(counterSlice);

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <Provider store={store}>
          <Counter />
        </Provider>
      </header>
    </div>
  );
}

整个代码的格式为this sandbox
我想使用configureStore形式的@reduxjs/toolkit包,而不是过时的createStoreredux包。
你知道我该怎么做吗?

anauzrmj

anauzrmj1#

export default configureStore({
  reducer: {
    counter: counterReducer
  }
});

相当于

const store = createStore(combineReducers: {
  counter: counterSlice
});

这意味着将在state.counter处找到来自counterSlice的数据。
旧代码执行createStore(counterSlice),这意味着来自counterSlice的数据将在state处找到。
因此,这两种方法都有效,但您必须根据您的操作从不同的位置选择数据。
您的选择器

export const selectCount = (state) => state.count;

必须是

export const selectCount = (state) => state.counter.count;

得双曲余切值.

相关问题