(import from default export) Redux中的root reducer是不是自动调用了'rootReducer'?

(import from default export) Is the root reducer in Redux automatically called 'rootReducer'?

我正在阅读许多 Redux 教程,但让我感到困惑的是,当使用组合减速器创建 Redux 存储时,通常会引用名称 rootReducer 作为root reducer,尽管它从未被主动命名。 这是否类似于被利用的默认行为?因为它似乎是那样工作的。

我怀疑,跟方式有关系,reducer合并导出

export default combineReducers.

这是一个例子:

./reducers/combined.js :

import { combineReducers } from 'redux';
import filmReducer from './filmReducer';

export default combineReducers({
  media: filmReducer
});

然后,在 ./store.js :

import { createStore, applyMiddleware } from 'redux';
... 
import rootReducer from './reducers';    // why can 'rootReducer' be imported?

反正找了半天,还是没有找到任何关于这个现象的参考资料。

你的 reducer 默认导出并且默认导入可以给定任何名称

你也可以把它叫做reducer。这只是取决于你想怎么称呼它

import reducer from './reducers';

如果您没有将 reducer 导出为默认值,而是命名导出,那么您应该在导入时使用相同的名称

例如:

import { combineReducers } from 'redux';
import filmReducer from './filmReducer';

export const reducer = combineReducers({
  media: filmReducer
});

将导入为

import { reducer } from './reducers/combined';  

P.S。您还必须注意,您可以在目录中从 index.js 导入组件,而无需在导入路径中指定索引文件。但是对于任何其他文件名,您需要提及导入的文件名

请参考 MDN docs on import

Reducer 是一个函数,它接受先前的状态、操作,然后 returns 一个新的状态。

(previousState, action) => nextState

在redux中,reducer函数只有一个。它处理所有操作和 returns 新状态。这个 reducer 函数通常称为 rootReducer,但您可以随意调用它。创建商店时,第一个参数是根减速器。

createStore(reducer, [preloadedState], [enhancer])

(查看文档:https://redux.js.org/api/createstore

As your app grows more complex, you'll want to split your reducing function into separate functions, each managing independent parts of the state.

The combineReducers helper function turns an object whose values are different reducing functions into a single reducing function you can pass to createStore.

这是来自官方文档,解释什么是combineReducers:https://redux.js.org/api/combinereducers

在您的代码中:

export default combineReducers({
    media: filmReducer
 });

combineReducers returns 上面提到的reducer函数。 export default 然后将导出该函数,以便您可以从 ./store.js

导入它

如果您想了解更多 import/export 的工作原理,请查看此 https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export