首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用中间件将redux-devtools传递到redux商店

使用中间件将redux-devtools传递到redux商店
EN

Stack Overflow用户
提问于 2016-06-01 17:53:52
回答 1查看 1.9K关注 0票数 2

如何处理这段代码与在redux文档中编写它的方式有关?

https://github.com/auth0-blog/redux-auth/blob/master/index.js#L10-L12

代码语言:javascript
复制
let createStoreWithMiddleware = applyMiddleware(thunkMiddleware, api)(createStore)

let store = createStoreWithMiddleware(quotesApp)

我不知道如何重写它以包含DevTools,但我确实找到了 GitHub链接,其中包含了一个包含DevTools的拉请求,自那以后我就开始工作了。但是,我仍然不明白它是如何应用的,以及let something = function(param1,param2)(function)是怎么回事。我知道,使用这种语法,applyMiddleware的返回值将被发送到createStore,但是createStore语法需要一个还原剂initialState和一个增强器。这是如何在这里应用的?

代码语言:javascript
复制
import { createDevTools } from 'redux-devtools'
import LogMonitor from 'redux-devtools-log-monitor'
import DockMonitor from 'redux-devtools-dock-monitor'

const DevTools = createDevTools(
  <DockMonitor toggleVisibilityKey="ctrl-h" changePositionKey="ctrl-q">
    <LogMonitor theme="tomorrow" preserveScrollTop={false} />
  </DockMonitor>
)

let createStoreWithMiddleware = applyMiddleware(thunkMiddleware, api)(createStore)

let store = createStoreWithMiddleware(quotesApp, DevTools.instrument())

redux-devtools文档中的以下语法相反,语法使我感到困惑。

initialState会发生什么呢?在例句中,任何地方都没有对initialState的引用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-01 18:07:39

存储增强器定义签名看起来大致如下(摘自“apply中间件”的定义):

代码语言:javascript
复制
export default function applyMiddleware(...middlewares) {
    return (createStore) => (reducer, preloadedState, enhancer) => {
        // snip actual enhancer logic

        return {
            ...store,
            dispatch
        }
    }
}

因此,增强器定义实际上返回一个引用createStore函数本身的函数。

不幸的是,人们似乎从某个地方复制了那种非常面向功能的调用模式,这是很难理解的。不确定它是否在早期版本的文档中,或者什么。注意,这个特殊的使用模式不允许定义initialState (或者,因为它即将被重命名,preloadedState)。

因此,是的,目前的定义模式,以及我认为更具可读性的定义模式是:

代码语言:javascript
复制
const middlewares = [thunk, myMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
const enhancers = compose(middlewareEnhancer, someOtherEnhancer);

const store = createStore(reducer, preloadedState, enhancers);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37575652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档