2017-03-17 95 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