【问题标题】:What difference between using `compose` for middleware or list them in `applyMiddleware`将 `compose` 用于中间件或在 `applyMiddleware` 中列出它们有什么区别
【发布时间】:2018-01-12 10:12:49
【问题描述】:

这些configureStore 函数和initialState 参数有什么区别?

import { createStore, applyMiddleware } from 'redux';
import logger                           from 'redux-logger';
import thunk                            from 'redux-thunk';

import rootReducer                      from '../reducers';

export default function configureStore(initialState){
   const store = createStore(
        rootReducer,
        initialState,
        applyMiddleware(thunk, logger) //list of middlewares in arguments
    );
    return store;
}

export default function configureStore() {
    const store = compose( //composed middlewares
        applyMiddleware(thunk),
        applyMiddleware(logger)
    )(createStore)(rootReducer);
    return store;
}

【问题讨论】:

    标签: javascript reactjs react-redux react-router-redux


    【解决方案1】:

    来自documentation

    compose 所做的只是让您编写深度嵌套的函数转换,而无需代码向右漂移。不要太相信它!

    它的用法:

    这是一个函数式编程实用程序,它包含在 Redux 中是为了方便。 您可能希望使用它连续应用多个商店增强器。

    所以本质上,如果你想应用一堆中间件,它是一个有用的实用程序:

     ...
     compose(
        applyMiddleware(thunk),
        DevTools.instrument(),
        // ... more enhancements, that may or may not be middleware
     )
     ...
    

    applyMiddleware 专门用于包装 store 的 dispatch 函数,而 compose 将允许您添加可能与调度无关的其他增强器,例如 Redux Dev Tools。

    中间件只包装了 store 的 dispatch 函数。从技术上讲,中间件可以做的任何事情,您都可以通过包装每个调度调用来手动完成,但在一个地方进行管理并在整个项目的规模上定义动作转换会更容易。

    【讨论】:

    • 我知道这一点。我不明白为什么不在applyMiddleware 参数中列出它们?
    • @Firanolfind 我更新了答案。 applyMiddleware 特定于与调度相关的增强功能,而 compose 允许添加可能与此无关的增强功能
    • 你能解释一下为什么我们必须在 compose 结尾传递参数,比如compose(...)(createStore)(rootReducer) 作为答案吗?请添加示例如何在没有 compose 的情况下编写 第二个代码,这将有助于我了解它是如何工作的。
    • @Firanolfind 例如,compose(f, g, h) 等同于做(...args) => f(g(h(...args)))
    • 那是抽象的例子,我知道 compose 是如何工作的。但在示例上下文中,我与 applyMiddleware 函数混淆了。请在您的答案中添加示例。最好的问候
    猜你喜欢
    • 2020-12-10
    • 2021-08-10
    • 1970-01-01
    • 2010-10-18
    • 2017-02-09
    • 2014-03-20
    • 2022-12-20
    • 2022-10-16
    • 1970-01-01
    相关资源
    最近更新 更多