2016-12-28 87 views
12

我是想为我目前使用以下语法创建于Redux的商店: -了解撰写功能

const middlewares = [ 
    thunk, 
    logger 
] 

const wlStore = createStore(
    rootReducer, 
    initialState 
    compose(applyMiddleware(...middlewares)) 
) 

以上工作正常,我和我最近访问商店,但我我遇到了另一种语法: -

const wlStore=applyMiddleware(thunk,logger)(createStore)(rootReducer) 

他们两个似乎都在做同样的工作。

有没有什么理由因为我比较喜欢一个呢?优点缺点?

回答

38

改进的可读性和便利性是使用撰写的主要优点。

撰写用于当您要将多个存储增强器传递到存储时。商店增强功能是高级功能,可为商店增添一些额外的功能。默认情况下Redux提供的唯一存储增强器是applyMiddleware但是其他许多可用的。

商店增强子是高阶函数

什么是高阶函数?从Haskell docs转述:

高阶函数可以作为参数和返回功能返回 值。那会那样做这些的函数称为高阶 功能

从终极版文档:

所有撰写不会是让你写深度嵌套函数变换无码的向右漂移。不要给它太多的信用!

因此,当我们连锁我们的高阶函数(存储增强),而不必写

func1(func2(func3(func4)))) 

,我们可以只写

compose(func1, func2, func3, func4) 

的这两行代码做同样的事情。它只是语法不同而已。

Redux的实例

Redux docs如果我们不使用撰写我们将有

finalCreateStore = applyMiddleware(middleware)(
     require('redux-devtools').devTools()(
     require('redux-devtools').persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/))() 
    ) 
    )(createStore); 

而如果我们用撰写

finalCreateStore = compose(
    applyMiddleware(...middleware), 
    require('redux-devtools').devTools(), 
    require('redux-devtools').persistState(
     window.location.href.match(/[?&]debug_session=([^&]+)\b/) 
    ) 
)(createStore); 

阅读更多关于Redux的作品功能click here

+2

辉煌摘要.... –