项目作者: noneven

项目描述 :
Unidirectional DataFlow State Management
高级语言: JavaScript
项目地址: git://github.com/noneven/Fluder.git
创建时间: 2016-08-15T07:11:21Z
项目社区:https://github.com/noneven/Fluder

开源协议:MIT License

下载


Fluder

Unidirectional DataFlow State Management

更加轻量,更加便捷,更加高效。[没有框架限制/React、Vue完美使用]

Build Status
Coverage Status
npm ver
npm dm
LICENSE

10秒了解Fluder











todoAction

  1. export defaultactionCreate({
    addTodo:(item)=>({
    type: constants.ADD_TODO,
    value: item
    })
    })


todoStore

  1. let items = [];
    export default storeCreate(todoAction, {
    getAll: function(){
    return items
    }
    },{
    [constants.ADD_TODO]: function(payload){
    push(payload.value)
    return items
    }
    })
    function push(item){
    items.push(item)
    }


React Component

  1. componentDidMount(){
    todoStore.addChangeListener(()=>{
    this.setState({
    items: todoStore.getAll()
    })
    })
    }
    addTodo(e){
    todoAction.addTodo({
    text: e.target.value,
    done: false
    });
    }


Vue Component

  1. methods:{
    addTodo(e){
    todoAction.addTodo({
    text: e.target.value,
    done: false
    });
    }
    },
    created (){
    todoStore.addChangeListener(()=>{
    this.items = todoStore.getAll()
    })
    }

主要解决的痛点如下:

  • 1、Redux对没有函数式编程经验的人来说不好理解,很难用好,
  • 2、Redux的树形Store需要做太多的shouldComponentUpdate,
  • 3、Redux推崇state不可变
  1. state = Object.assign({}, state)
  2. state.count++
  3. return state

使得Redux在Vue上使用很尴尬(vm对state的监听失效),

  • 4、其他线性Store的Flux实现中 Action => Store触发change更新view的成本高,Fluder用id把Action-Store关联起来提高Action到更新View的成本。

安装

npm: https://www.npmjs.com/package/fluder

使用 npm 来安装 Fluder

  1. npm install fluder

运行Example

  1. //Vue example
  2. npm run exampleVue
  3. //React example
  4. npm run exampleReact

构建

  1. npm run build

测试

  1. npm run test

调用

  1. import {
  2. storeCreate,
  3. actionCreate,
  4. applyMiddleware,
  5. actionStoreCreate
  6. } from 'fluder'

API

  1. Fluder/storeCreate
  2. Fluder/actionCreate
  3. Fluder/applyMiddleware
  4. Fluder/actionStoreCreate

介绍

fluder-design

Fluder Store

Store => 数据存储和Handlers管理中心,Store 仅仅提供了 读取 数据的接口,杜绝Store数据被篡改的风险。

Views (也可以说是Controller-Views及React组件)中,只能从 Store读取 数据,在 Store Handlers 中(通过send Action),才能 写入 (这里的写入不是store提供的API进行写入,而是只有在handlers里面才能读取到store构建的闭包中的数据)和 读取 数据。

当数据变化的时候,Store 会发送一个数据变化的事件(这个事件会把变化后的 Store 和引起变化的 action payload 传入,通过这个 payload 我们可以优化 Store 变化的回调函数的执行)。

Fluder Actions

和Flux的 Action 概念一致,所有引起数据变化的操作都只能通过 Action 操作(比如更新数据/修改数据/删除数据)。前面 Store 中提到,只有在 Store Handlers 中才能 写入 数据,而能让 Store Handlers 执行的就是 Action 的发送

Fluder Dispatcher

Fluder里面隐藏了 Dispatcher,Action send Map到Store对应的handler后直接执行handler,存储和Map以及_invoke的操作都是 Dispatcher 进行,只是在Fluder里面进行了隐藏

Fluder Middleware

提供一个统一操作 Action 的API,所有action都需要依次执行中间件队列里面的函数(参数为action的payload和storeId,这里的参数需要shallow Freeze),类似于express框架的中间件统一处理客户端请求

Fluder Handlers

Action 触发的时候,Store 需要一个与该 Action 对应的回调函数来处理 payload 数据,这时可以将数据写入到 Store 中。ActionType 需要与 Store 的回调函数名相对应。

Fluder Action-Store

ActionStore在创建的时候必须匹配ID,一个Action对应一个Store,当 Action 触发的时候可以通过Action的ID Map到需要操作的Store,这样避免了循环查找所有Store,然后再通过Action的ActionType Map到Store对应的的Handler(Action=>Store Change时间复杂度为1),同时也避免了Flux里面的Switch case。

API

applyMiddleware-中间件

storeCreate-创建Store

actionCreate-创建Action

actionStoreCreate-Action和Store一起创建

use

API文档

Vue and React Action/Store Create with the same code

Thanks

Flux

Redux

Webpack

GitBook

License

MIT