当前位置:  开发笔记 > 编程语言 > 正文

Redux中间件,thunk?

如何解决《Redux中间件,thunk?》经验,为你挑选了1个好方法。

我直接从Redux文档中得到了这个:

const logger = store => next => action => {
  console.group(action.type)
  console.info('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  console.groupEnd(action.type)
  return result
}

现在,我知道如何使用承诺,但是thunks ......我有点失落.

为什么他们要做到以下几点:store => next => action =>



1> Ori Drori..:

在关于中间件的redux文档中,您可以看到ES6箭头函数链:

logger = store => next => action =>

在翻译为ES5时看起来像这样:

function logger(store) { // this is not the store, just an object with getState and dispatch
  return function wrapDispatchToAddLogging(next) {
    return function dispatchAndLog(action) {
      console.log('dispatching', action)
      let result = next(action)
      console.log('next state', store.getState())
      return result
    }
  }
}

为什么我们需要一个返回函数的函数:

这称为部分应用程序,您可以在本文中阅读更多相关内容.

基本的想法是,如果你需要为一个函数提供3个参数,但是你现在只有1个参数,1个稍后,而第3个将在远期,你可以按顺序应用参数可用,而不是一次.每次应用参数时,都会得到一个新函数,该函数的上下文中包含参数"stored".

在Redux

中间件需要部分应用,因为创建中间件链有几个步骤:

注意:这是传递给第一个参数的实际"存储":

const middlewareAPI = {
  getState: store.getState,
  dispatch: (action) => dispatch(action)
}

    迭代中间件的数组,调用每个函数并为每个函数(store =>param)提供middlewareAPI :

    chain = middlewares.map(middleware => middleware(middlewareAPI))

    组成中间件数组:

    dispatch = compose(... chain)(store.dispatch)

    并且在编写时将每个中间件作为next =>参数传递dispatch给它之前的那个,并传递给最后一个:

    return funcs.reduce((a,b)=>(... args)=> a(b(... args)))

    现在,中间件是一个只有一个参数的简单函数action =>,每当一个动作传递到中间件链时,action =>每个中间件的功能都会被当前动作调用.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有