2017-03-17 31 views
1

我正在学习做出反应,终极版和我有这样进出口减速与之反应,终极版

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中的缩减器,并且ES6中的语法导入不是import * as reducer。它为什么有效?

回答

0

出口默认todoApp

  • 所以每当你 “./reducers'从进口XYZ'”,reducer.js会默认reducer.js返回 todoApp怎么一回事,因为正在恢复它。不管你给的名字是什么 ,你可以改变'.reducers''的进口减速器到 '从./reducers输入红色',它也可以在这种情况下工作。
  • 只有一件事你应该记住,无论何时导入 默认元素,你应该避免在导入的 元素周围应用'{}'。所以在你的情况“从”./reducer'“导入{reducer}将 是错误的。
  • 但是,如果你在写reducers.js“出口常量todoApp”,然后在 情况下,你必须给确切的名称,同时将其导入,现在你必须 进口为“进口{} todoApp从” ./reducers '
  • 而且应该只有一个文件的默认导出。
+0

是的,但是我的项目中没有文件缩减器。只有一个名为redurs的文件夹,那么./reducers在这里是什么? –

+0

**这代码下面必须写在一些文件中,哪个文件是** '常量todoApp = combineReducers({ 待办事项, visibilityFilter }) 出口默认todoApp' **结合减速器用于结合你的项目中的所有reducer返回一个reducer,它是所有reducer的组合,在你的情况下它是todoApp ** –

2
export default todoApp 

所以当import reducer from './reducers'被称为todoApp存储里面reducer。这就是为什么我们使用默认关键字。变量名不需要是reducer它可以是任何东西。

通过使用默认的关键字单个值或回退值传递给进口它

同样,如果我们导出的函数,但没有默认 如

export function someFunc(){...} 

我们可以通过

导入文件
import {someFunc} from '/file/path.js' 

编辑:文件只能有一个默认导出。当我们导入其他组件时,我们需要指定组件名称作为标识符(例如{someFunc})。对于默认导入,我们可以使用任何我们想要的标识

Read more about import here

+0

但是,从reducer,还有另一个组件,它被用来组合Redeucers,那么它如何知道哪一个将被导入? –

+0

如果有另一个导出组件,我们不能使用默认值。只能有一个默认导出。如果我们想要导入另一个组件,我们需要使用'。/ reducer.js''的import componentName。 – DroidNoob

+0

,但在相同的文件夹减速器下,我有3个不同的组件使用导出默认值。在我提到的代码中,'todoApp'导入默认导入的'todos'和'visibilityFilter',然后再次导出默认,全部在同一个文件夹中 –

1

当你从一个模块输出的东西作为默认情况下,基本上出口匿名变量。所以,当你导入任何这样的东西时,可以选择任何名称在导入的文件中使用。

+0

但是,从reducer,还有另一个组件,它被用来'combineReedcers',所以它怎么知道哪一个将被导入? –

+0

combineReducers是一个redux函数,它返回一个reducer,它调用您传递给combineReducers的每个子约束。因此,每当一个动作被调度时,每个来自./reducers的reducer都会被调用。在你的情况下,每个子减速器将接收到与子减速器名称相同的部分状态。这是因为你称它为'combineReducers({todos,visibilityFilter}); – sergeysmolin