2

相对于 redux-devtools 文档中的编写方式,这段代码是如何处理的?

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

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

let store = createStoreWithMiddleware(quotesApp)

我不确定如何重写它以包含 DevTools,但我确实找到了这个GitHub 链接,其中包括一个包含 DevTools 的拉取请求,我已经开始工作了。但是,我仍然不明白它是如何应用的以及let something = function(param1,param2)(function). 我知道使用该语法将返回值applyMiddleware发送到createStore,但该createStore语法需要一个 reducer、initialState 和一个增强器。这是如何在这里应用的?

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任何地方的引用。

4

1 回答 1

1

商店增强器定义签名大致如下所示(从 `applyMiddleware 的定义中截取):

export default function applyMiddleware(...middlewares) {
    return (createStore) => (reducer, preloadedState, enhancer) => {
        // snip actual enhancer logic

        return {
            ...store,
            dispatch
        }
    }
}

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

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

所以是的,当前的定义模式,我认为更具可读性的模式是:

const middlewares = [thunk, myMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
const enhancers = compose(middlewareEnhancer, someOtherEnhancer);

const store = createStore(reducer, preloadedState, enhancers);
于 2016-06-01T18:07:39.353 回答