javascript - 在redux中reducers获取Function而不是Object,这有什么问题吗?

标签 javascript reactjs redux

我的 React 和 Redux 项目出现错误。我没有找到如何解决它。

这是错误消息:

reducer 接收到的先前状态具有意外的“Function”类型。预期参数是具有以下键的对象:“posts”、“sidebar”

error message

代码:

store.js:

import { createStore, applyMiddleware } from 'redux'
import logger from 'redux-logger'
import thunk from 'redux-thunk'

import reducers from '../reducers/index'

const middleware = process.env.NODE_ENV === 'production' ? [ thunk ] : [ thunk, logger() ]

const store = createStore(reducers, applyMiddleware(...middleware),  window.devToolsExtension ? window.devToolsExtension() : f => f)

export default store

reducer /index.js:

import { combineReducers } from 'redux'
import posts from './posts'
import sidebar from './sidebar'

const rootReducer = combineReducers({
    posts,
    sidebar
})

export default rootReducer

reducers/posts.js:

import {
    RECEIVE_POSTS,
    RECEIVEING_POSTS
} from '../containers/index'

const initialState = {
    posts: [],
    post: {},
    message: 'done'
}

const post = (state = initialState, action) => {
    switch (action.type) {
        case RECEIVE_POSTS:
            return Object.assign({}, state, {
                posts: action.posts
            })
            break
        case RECEIVEING_POSTS:
            return Object.assign({}, state, {
                message: 'loading'
            })
        default:
            return state
    }
}

export default post

reducer /sidebar.js

import {
    TOGGLE_SIDEBAR
} from '../containers/index'

const initialState = {
    show: true
}

const sidebar = (state = initialState, action) => {
    switch (action.type) {
        case TOGGLE_SIDEBAR:
            return Object.assign({}, state, {
                show: ! state.show
            })
            break
        default:
            return state
    }
}

export default sidebar

我阅读了 redux 示例,但我不知道我的代码有什么问题。它只是抛出错误。

这些代码非常像 redux 示例!!!

感谢您的耐心等待。

最佳答案

这是以前可以工作的旧方法:

const store = createStore(reducers, applyMiddleware(...middleware),  window.devToolsExtension ? window.devToolsExtension() : f => f)

现在您必须将其转换为:

const store = redux.createStore(
    rootReducer,
    initialState,
    redux.compose(
        redux.applyMiddleware(...middleware),
        window.devToolsExtension ? window.devToolsExtension() : f => f
    )
);

关于javascript - 在redux中reducers获取Function而不是Object,这有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209491/

相关文章:

angular - Redux:获取触发的 Action 列表

javascript - 提示后在纯 JS 中保留复选框状态

Javascript,页面不断刷新

reactjs - 如何根据当前 url/url 片段呈现不同的消息

javascript - React Hook "useNavigate"在函数中被调用

reactjs - 提取组件后的"Expected subtree parent to be a mounted class component. "

javascript - 是不是window构造函数错误?

javascript - 我们可以使用 axios 拦截器来响应 window.fetch 发出的 http 调用吗?

javascript - 为什么 Material-UI Appbar onLeftIconButtonTouchTap 不起作用?

reactjs - 如何使用 redux 和 react-native 打开模式