美文网首页
Redux的函数式编程思想

Redux的函数式编程思想

作者: wlszouc | 来源:发表于2017-10-24 17:22 被阅读0次

控制流框架 Redux 是研究函数式编程的极佳实例,因此网络上对其语句分析的文章众多,但绝大多数是描述具体实现,而本文尝试利用函数式编程的数学抽象来映射 Redux 的编程理念。

首先给出函数式编程的基础抽象概念 container:

var Container = function (x) {
  this.__value = x;
};

Container.of = function (x) {
  return new Container(x);
};

同时定义一个 functor:

//  (a  ->  b)  ->  Container   a   ->  Container   b
Container.prototype.map = function (f) {
  return Container.of(f(this.__value));
};

分析一下 container 和 functor:

  • Container 中含有 __valuemap 两个属性,而修改 __value 的方法只有 map,在操作完 __value 后将新值放回 Container 中。
  • 如何操作或修改 __value 由 f 给出。

对比 Redux 的源码:

export default function createStore(reducer, preloadedState, enhancer) {
  // ......
  return enhancer(createStore)(reducer, preloadedState)
}
// ......
let currentReducer = reducer
let currentState = preloadedState
// ......
function getState() {
  return currentState
}
// ......
function dispatch(action) {
  // ......
  try {
    isDispatching = true
    currentState = currentReducer(currentState, action)
  } finally {
    isDispatching = false
  }
  // ......
  return action
}
// ......
return {
  dispatch,
  subscribe,
  getState,
  replaceReducer,
  [$$observable]: observable
}
  • store 是一个容器含有 statereducer,这从 store 的创建语句 enhancer(createStore)(reducer, preloadedState) 可以很明显的得出。而修改 store 中的 currentState 的唯一方法是使用 currentReducer,并且 currentState 在修改完后将新值依然存放在 store 内。
  • 如何修改 currentState 是根据用户操作 action

因此通过对比得到如下结果:

store -> container
currentState -> __value
action -> f
currentReducer -> map

类似可以得出 middleware 是 IO functor 的映射,以此来解决异步操作的各种问题。

Redux 所谓的函数式编程不仅仅体现在具体语句的实现,其编程理念的基础也依赖于函数式编程的数学概念。本文也只是简单分析了 Redux 的容器构建也就是 store 的数学理念,具体的控制流可以参看 函数式编程在Redux/React中的应用 这篇出色的分析文章。最后不得不感叹 Redux 的设计水平以及先进理念,感谢 Redux 作者。(Facebook 早已看穿一切)

参考:
JS 函数式编程指南

相关文章

  • redux简介(二)源码解析

    写在开头 前置知识内容,闭包,高阶函数,函数式编程思想,redux核心概念。 redux文档:https://ww...

  • Redux的函数式编程思想

    控制流框架 Redux 是研究函数式编程的极佳实例,因此网络上对其语句分析的文章众多,但绝大多数是描述具体实现,而...

  • 函数式编程在 Redux 源码中的应用

    前言 Redux 正是函数式编程的一个经典实现,本文将依据原版的 redux ,简单讲述一下 redux 的函数式...

  • Redux 源码剖析

    Redux Redux 是为了处理应用复杂状态流而设计的状态管理库,它吸收了 Flux 架构和函数式编程的优秀思想...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • python面向对象1

    编程思想 编程思想:面向过程编程(穷人思想)、函数式编程、面向对象编程(富豪) 面向过程编程: 算法和逻辑 函数式...

  • Redux中的函数式编程思想

    Redux作者自己说过:Redux = Reduce + Flux Redux为什么难?因为它不是我们熟知的面向对...

  • Scala 入门

    1 函数式编程思想 1.1 介绍 1.2 scala函数式编程思想 2 环境搭建 3 实战 4 变量 函数 函数定...

  • Kotlin 函数式编程思想 FP in Kotlin

    Kotlin 函数式编程思想 : FP in Kotlin 函数式编程特性 闭包和高阶函数 函数编程支持函数作为第...

网友评论

      本文标题:Redux的函数式编程思想

      本文链接:https://www.haomeiwen.com/subject/buhxpxtx.html