减速器未导入动作类型常量

时间:2019-08-09 09:00:24

标签: javascript reactjs redux reducers

我有一个root reducer,它从另一个文件导入动作类型常量。由于createstore首次调用reducer时,这些常量的值未定义。

我试图将这些常量转换为函数,但给了我错误-“对象不能为函数”。当我打印它的类型时,它最初给我未定义的内容,但后来调用时会打印出type-function。

我的目录结构是这样的

helpers/
 -index.js
 -store.js
 -constants.js

reducers/
 -index.js
 -rootReducer.js

每个index.js文件的类型都是-

export * from './rootReducer'

这是我的商店文件(store.js)-

import { createStore, applyMiddleware, compose } from 'redux'
import { rootReducer } from '../reducers'
import ReduxThunk from 'redux-thunk'

const initialState = {}

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
export const store = createStore(
    rootReducer,
    initialState,
    composeEnhancers(applyMiddleware(ReduxThunk))
)

这是我的常量文件(constants.js)-

export const constants = {
    BENCHMARK_DATA_RECEIVED: 'BENCHMARK_DATA_RECEIVED',
    BENCHMARK_DATA_FAILED: 'BENCHMARK_DATA_FAILED',
}

这是我的根减少器(rootReducer.js)-

import { constants } from '../helpers'

export const rootReducer = (state = [], action) => {
    console.log(constants)
    // Initially print undefined
    // After that prints correct value

    switch (action.type) {
        case 'BENCHMARK_DATA_RECEIVED':
            return { ...state, benchmark_data: action.payload }
        default:
            return state
    }
}

我不确定导致此问题的原因,但仅在第一次使用reducer时才会发生(很可能在创建store时)。我在Google上搜索了很多,但没有遇到任何此类问题。也许我的设置有些问题。同样,将这些常量打印在任何地方(例如动作创建者)都可以。

1 个答案:

答案 0 :(得分:1)

要总结评论中的讨论,您可以直接从化简器中的constants.js导入,同时调查您拥有的文件结构。