javascript - applyMiddleware的参数为什么加展开符?
PHPz
PHPz 2017-04-11 11:46:11
[JavaScript讨论组]
export default function applyMiddleware(...middlewares) {
  return (createStore) => (reducer, preloadedState, enhancer) => {
    const store = createStore(reducer, preloadedState, enhancer)
    let dispatch = store.dispatch
    let chain = []

    const middlewareAPI = {
      getState: store.getState,
      dispatch: (action) => dispatch(action)
    }
    chain = middlewares.map(middleware => middleware(middlewareAPI))
    dispatch = compose(...chain)(store.dispatch)

    return {
      ...store,
      dispatch
    }
  }
}

这里参数为什么要用展开符? 使用的时候传入的是数组,如:
const middlewares = [ thunk, logger ]
applyMiddleware(...middlewares)
那这样函数中 middlewares.map 的 middlewares岂不是 [[thunk, logger]]了么。

PS: 奥。。明白了,同时支持applyMiddleware(thunk, logger)和applyMiddleware(...[thunk, logger])两种方式调用。
大家忽略吧

PHPz
PHPz

学习是最好的投资!

全部回复(2)
高洛峰

这里用...middlewares,在ES6中叫做[不定参数][1],和arguments的效果类似,把传入的所有参数,作为一个array赋值给middlewares

例子:

function test(...args) {
   console.log(args); // [1,2,3]
}

test(1,2,3)
巴扎黑

...args 是为了将args转换为数组,这样也可以传array like的参数了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号