redux工具包中下面两个cofigurestore有什么区别

vtwuwzda  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(121)

我是Redux Toolkit的新手,并遵循文档。我正在配置存储,我在快速概述部分看到了这种方法https://redux-toolkit.js.org/usage/usage-guide#simplifying-store-setup-with-configurestore

import { configureStore } from '@reduxjs/toolkit'
import rootReducer from './reducers'

const store = configureStore({
  reducer: rootReducer,
})

export default store

但在快速入门文档中,我也看到了这种方法https://redux-toolkit.js.org/tutorials/quick-start

import { configureStore } from '@reduxjs/toolkit'
import counterReducer from '../features/counter/counterSlice'

export const store = configureStore({
  reducer: {
    counter: counterReducer,
  },
})

假设我们导出slicename.reducers,其中一个使用切片名称嵌套,而另一个直接指定为reducer,为什么这两个不同?
如果有多个减速器并将其组合,是否采用reducer: { counter: counterReducer, },方法?

pkmbmrz7

pkmbmrz71#

configureStore函数的reducer选项可以是函数或对象。源代码configureStore.ts#L162:

if (typeof reducer === 'function') {
  rootReducer = reducer
} else if (isPlainObject(reducer)) {
  rootReducer = combineReducers(reducer) as unknown as Reducer<S, A>
}

// ... 

return createStore(rootReducer, preloadedState, composedEnhancer)

正如你所看到的,如果你为每个状态片传递一个充满reducer的对象。它将使用redux combineReducers来合并它们。rootReducer将在最后传递到createStore函数中,请参见configureStore.ts#L214。
这就是他们之间的区别。更常见的是,我们使用第二种方法,将状态树划分为多个状态片。并将它们组合成根减速器。但是如果你的应用程序很简单,并且不需要维护复杂的状态,那么你就不需要分割状态树,一个根reducer就足够了。

相关问题