Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Redux似乎混淆了状态/还原器_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs Redux似乎混淆了状态/还原器

Reactjs Redux似乎混淆了状态/还原器,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我在react中遇到了一个非常奇怪的问题,我的还原程序似乎在修改状态中不应该修改的部分,我确信这是由于我的实现中的一些疏忽,但我无法找到它 我目前有一个存储、两个动作/动作创建者、两个减缩器和一个根减缩器。这是我的代码(省略了一些不重要的细节): - - - - - 我创建的商店如下所示: const logger = createLogger(); const store: Store<any> = createStore(rootReducer, {/*Initial state

我在react中遇到了一个非常奇怪的问题,我的还原程序似乎在修改状态中不应该修改的部分,我确信这是由于我的实现中的一些疏忽,但我无法找到它

我目前有一个存储、两个动作/动作创建者、两个减缩器和一个根减缩器。这是我的代码(省略了一些不重要的细节):

-

-

-

-

-

我创建的商店如下所示:

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))
以下是我的记录器的输出:

[![Search call][1]][1] [![change page call][2]][2]

您可以在这里看到,状态显然混淆了,错误的数据将进入changeSearchPage键


造成这种混乱的原因是什么?

在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));