Reactjs Redux似乎混淆了状态/还原器
我在react中遇到了一个非常奇怪的问题,我的还原程序似乎在修改状态中不应该修改的部分,我确信这是由于我的实现中的一些疏忽,但我无法找到它 我目前有一个存储、两个动作/动作创建者、两个减缩器和一个根减缩器。这是我的代码(省略了一些不重要的细节): - - - - - 我创建的商店如下所示:Reactjs Redux似乎混淆了状态/还原器,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我在react中遇到了一个非常奇怪的问题,我的还原程序似乎在修改状态中不应该修改的部分,我确信这是由于我的实现中的一些疏忽,但我无法找到它 我目前有一个存储、两个动作/动作创建者、两个减缩器和一个根减缩器。这是我的代码(省略了一些不重要的细节): - - - - - 我创建的商店如下所示: const logger = createLogger(); const store: Store<any> = createStore(rootReducer, {/*Initial state
const logger = createLogger();
const store: Store<any> = createStore(rootReducer, {/*Initial state empty*/}, applyMiddleware(logger));
const logger=createLogger();
conststore:store=createStore(rootReducer,{/*初始状态为空*/},applyMiddleware(logger));
-
一般流程如下所示:
const logger = createLogger();
const store: Store<any> = createStore(rootReducer, {/*Initial state empty*/}, applyMiddleware(logger));
- 用户在页面上输入搜索字符串,该字符串将触发一个
调用store.dispatch(submitSearch(string))
- 用户在页面上输入一个数字,该数字将触发存储调度(changeSearchPage(newPage))
造成这种混乱的原因是什么?在rootReducer中,您两次导入同一个reducer@JavascriptLoser,如果它解决了您的问题,请接受答案。这是避免默认导出并使用“./reducers/changeSearchPage”的
导入{changeSearchPage}的一个很好的理由。
-您将得到一个明确的错误。
//submitSearchReducer.ts
import { SUBMIT_SEARCH } from "../actions/actionTypes";
const submitSearch = (state = {}, action) => {
switch (action.type) {
case SUBMIT_SEARCH:
return {
...state,
submitSearch: action.submitSearch
}
default:
return state;
};
};
export default submitSearch;
//changeSearchPageReducer.ts
import { CHANGE_SEARCH_PAGE } from "../actions/actionTypes";
const changeSearchPage = (state = {}, action) => {
switch (action.type) {
case CHANGE_SEARCH_PAGE:
return {
...state,
changeSearchPage: action.changeSearchPage
}
default:
return state;
};
};
export default changeSearchPage;
//rootReducer.ts
import { combineReducers } from 'redux';
import submitSearch from "../reducers/submitSearchReducer"
import changeSearchPage from "../reducers/submitSearchReducer";
const rootReducer = combineReducers({
submitSearch: submitSearch,
changeSearchPage: changeSearchPage
});
export default rootReducer;
const logger = createLogger();
const store: Store<any> = createStore(rootReducer, {/*Initial state empty*/}, applyMiddleware(logger));