Javascript 使用React Redux导入和导出减速器

Javascript 使用React Redux导入和导出减速器,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在研究React Redux,我有一个这样的例子 const todoApp = combineReducers({ todos, visibilityFilter }) export default todoApp /*from reducers*/ 那我有 import reducer from './reducers' const store = createStore(reducer) render( <Provider store={store}>

我正在研究React Redux,我有一个这样的例子

const todoApp = combineReducers({
  todos,
  visibilityFilter
})

export default todoApp /*from reducers*/
那我有

import reducer from './reducers'

const store = createStore(reducer)

render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
)
从“/reducers”导入减速机
const store=createStore(reducer)
渲染(
,
document.getElementById('root'))
)
因此,它在./reducers中没有将任何内容导出为reducer,在ES6中,语法导入也不是
import*as reducer
。它为什么有效

export default todoApp
因此,当调用从“/reducers”导入减速机时,
todoApp
存储在
reducer
中。这就是我们使用默认关键字的原因。变量名不需要是
reducer
它可以是任何东西

通过使用default关键字,将单个值或回退值传递给导入该值的文件

同样,如果我们导出了一个没有默认值的函数 乙二醇

我们可以通过进口

import {someFunc} from '/file/path.js'
编辑:一个文件只能有一个默认导出。导入其他组件时,需要将组件名称指定为标识符(例如
{someFunc}
)。对于默认导入,我们可以使用所需的任何标识符


当您从模块中导出某个默认值时,基本上就是导出一个匿名变量。因此,当您从“某处”导入任何类似的内容时,该内容可以是您选择在执行导入的文件中使用的任何名称。

导出默认todoApp

  • 因此,无论何时“从“/reducers”导入xyz”,reducer.js都将返回 todoApp beacuse默认情况下reducer.js会返回它。无论如何 您可以将“导入还原程序”从“./reducers”更改为指定的名称 “从./reducers导入红色”在这种情况下也适用
  • 只有一件事你应该记住,那就是 您应该避免在导入的元素周围应用“{}” 元素。因此,在您的例子中,“import{reducer}from./reducer”将 我错了
  • 但是如果您在reducers.js中编写“export const todoApp”,那么 如果在导入时您必须给出确切的名称,现在您必须 将其作为“import{todoApp}从“/reducers”导入
  • 一个文件应该只有一个默认导出

但是,在reducer中,还有另一个组件,它用于
CombineReducer
,所以它如何知道将导入哪个组件呢?CombineReducer是一个redux函数,它返回一个reducer,调用传递给CombineReducer的每个子reducer。因此,在调度操作时,将调用来自./reducers的每个reducer。在您的情况下,每个子减速器将接收与子减速器同名的状态的一部分。这是因为您将其称为'combinereducer({todos,visibilityFilter});但是,从减速器中,还有另一个组件,用于组合减速器,那么它如何知道将导入哪个组件呢?如果有另一个导出组件,我们不能使用默认值。只能有一个默认导出。如果我们想导入其他组件,我们需要使用
import componentName from./reducer.js'
。但是在同一个文件夹reducers下,我有3个不同的组件使用export default。在我上面提到的代码中,
todoApp
import
todos
visibilityFilter
导入默认值,然后再次导出默认值,都在同一个文件夹中。好吧,我理解了,但还有一个问题,因为./reducers文件根本不存在,它只是一个文件夹。然后我猜那里有一个index.js文件。如果有,import语句将首先查看该文件。是的,但我的项目中没有文件缩减器。只有一个名为reducers的文件夹,那么这里的./reducers是什么呢?下面的代码必须写在某个文件中,它是哪个文件
const todoApp=combineReducers({todos,visibilityFilter})导出默认todoApp
combine reducers用于合并项目中的所有reducer返回一个reducer,它是所有reducer的组合,在您的情况下是todoApp
import {someFunc} from '/file/path.js'