meA*_*rew 2 reactjs redux redux-toolkit
请告诉我我做错了什么?配置Store.js:
import {configureStore, combineReducers} from "@reduxjs/toolkit";
import pokemonSearchSlice from "./slices/pokemonSearch";
const reducer = combineReducers({
pokemonSearch: pokemonSearchSlice
});
const store = configureStore({
reducer
});
export default store;
Run Code Online (Sandbox Code Playgroud)
pokemonSearch.js
import { createSlice } from "@reduxjs/toolkit";
const pokemonSearchSlice = createSlice({
name: "pokemonSearch",
initialState: {
searchInputValue: ""
},
reducers: {
setValue:(state, action)=>({...state, searchInputalue: action.payload})
}
}) ;
export const {setValue} = pokemonSearchSlice.actions;
export default pokemonSearchSlice;
Run Code Online (Sandbox Code Playgroud)
错误全文:redux.js:394 Store 没有有效的减速器。确保传递给combineReducers 的参数是一个值为reducer 的对象。另外,我无法从商店获取“searchInputValue”,控制台显示:无法解构“(0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(...)”的属性“searchInputValue”,因为它未定义。但我认为这是因为combineReducers 错误。有什么建议么?
这里有几个问题:
configureStore自动呼叫combineReducers您,因此您不想直接这样做。configureStore的reducer对象需要减速器,但您要传递给它一个切片。(切片包含一个减速器,但切片本身不是减速器。)setValue正在返回一个新对象,但 RTK 使用 Immer,因此您应该改变传递到函数中的状态并且不返回任何内容。最后你的代码应该是这样的:
// configureStore.js
import { configureStore } from "@reduxjs/toolkit";
import pokemonSearchSlice from "./slices/pokemonSearch";
const store = configureStore({
reducer: {
pokemon: pokemonSearchSlice,
},
});
export default store;
Run Code Online (Sandbox Code Playgroud)
// slices/pokemonSearch.js"
import { createSlice } from "@reduxjs/toolkit";
const pokemonSearchSlice = createSlice({
name: "pokemonSearch",
initialState: {
searchInputValue: "",
},
reducers: {
setValue: (state, action) => {
state.searchInputValue = action.payload;
},
},
});
export const { setValue } = pokemonSearchSlice.actions;
export default pokemonSearchSlice.reducer;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9949 次 |
| 最近记录: |