函数式编程应该如何理解?

最近在看react相关技术栈,感觉好多东西看起来有点吃力。
比如redux-saga的相关使用,如下:

import { createStore, combineReducers, applyMiddleware } from 'redux';
import userNameReducer from '../username/reducer.js';
import createSagaMiddleware from 'redux-saga';       
import rootSaga from './saga.js';                   

const sagaMiddleware = createSagaMiddleware()        // 执行create函数之后,返回值是一个中间件/函数 sagaMiddleware

const reducerAll = {
    userNameReducer: userNameReducer
}


export const store = createStore(
    combineReducers({...reducerAll}), // 这里是常规的fn(对象)的使用。最后返回的也是一个reducer对象
    window.devToolsExtension ? window.devToolsExtension() : undefined,    
    applyMiddleware(sagaMiddleware)                 // 这里就有点难理解了,为什么需要在applyMiddleware这个函数中将上面返回的sagaMiddleware这个函数传进来。如果把createStore看作fnA,那么可以转换为这种fnA({},fnB(fnC))结构,可是这个函数套函数的写法有点接受不了,习惯了fn(参数)的形式。。
)

sagaMiddleware.run(rootSaga)                        // 看到这里发现,原来sagaMiddleware还有一个run方法。。那也就是说它应该是一个具有run方法的对象。然后这里的rootSaga又是一个函数。。。又是fnA(fnB)的形式。。。。又晕了。

问题有两个:

  1. import createSagaMiddleware from 'redux-saga'; 中的createSagaMiddleware为什么不可以像 import { deepClone } from 'lodash';中的deepClone()直接使用。而是还需要将这个函数再用fnA(fnB)这种形式返回出一个新的函数,再去使用。
  2. 这种fnA({}, fnB(fnC(fnD), {}))这种写法感觉看着好难理解。。

求大佬们指点迷津。

阅读 1.4k
1 个回答

要看这个模块导出的东西和其他模块需要用到的东西是什么。简单说:
它导出一个工具函数,比如cloneDeep那就可以直接解构直接用。
它导出一个函数,但是实际要用的是这个函数的返回值,那就得先执行一下函数获取需要的东西。

对于你的第二个问题,面向对象思维。函数其实也是对象,它就像一个数组一样,只是函数内部有自己独特的方法属性,并且实现了一个call方法而已。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题