REDUX-COW开发框架介绍

REDUX-COW 简介

Redux是基于redux的改良框架,抛弃了redux的各种灵活性,保留了最佳的编程实践。相比redux,REDUX-COW具有如下特点:

上手简单

只有 Starter , fire, addAction, addReducer 4个API, 理解成本和使用成本很低。

约定胜于规则

redux-cow没有redux的灵活性,而是提供了最好的使用方法,只要遵循,即可以写出人人都可理解的代码。

低耦合性

redux-cow 使用了只有一个中心的全局事件派发机制,任何组件,任何模块都可以一条命令直达数据处理中心。
降低了模块间的耦合性。

REDUX-COW的事件流工作方式

任何一条事件的派发,都先到达action里进行处理,然后同样事件会到达reducer里处理,并最终更新到view.

安装

npm install redux-cow

API

Starter

Starter为程序入口的API, Starter只有一个方法 ,就是Starter.run。

import {Starter} from 'redux-cow';
import app from './app';
Starter.run(app);

任何一个基于redux-cow开发的程序,入口都一样

addAction

增加一个action处理器

import {addAction, fire} from 'redux-cow';

//静态payload的action,不带参数的action
/*
 fire({
    type: 'ADD_ONE'
 })
 */
addAction({
    type: 'ADD_ONE',
    payload: 1
});

// 动态payload
/*
 fire({
    type: 'ADD_CUSTOM',
    payload: 6
 })
 */
addAction({
    type: 'ADD_CUSTOM',
    payload: (value)=> {
        return value;
    }
});

addReducer

增加一个数据处理器, 每一条响应的action,都会产生一条响应的数据处理器


import {addReducer} from 'redux-cow';
/**
 * 这里的value,相当于state.value
 */
addReducer({
    value(initValue=0, action){
        switch (action.type) {
            case 'ADD_ONE':
            case 'ADD_CUSTOM':
                return initValue + action.payload;
            default:
                return initValue;
        }
    }
});

addReducer 每一个key 值,都会在state里增加一个对应的值。
以上的value,在 root view(app.js)的 this.props.value里可以获取到。

fire

fire是全局的命令派发器,可以在任意的模块里派发,并在reducer里进行处理。
fire能派发三种命令

不带参数的静态命令

以下代码派发一条,静态命令

fire({
   type: 'ADD_ONE'
});

带参数的动态命令
fire({
   type: 'ADD_CUSTOM',
   payload: 6
});
异步请求的命令

异步请求的命令,payload的值函数,异步请求的命令不会进一步被reducer处理
以下为异步请求的命令

addAction({
    type: 'FETCH_LIST_DATA',
    payload: (params)=>{
        return ()=> {
            //更改Loading的状态
            fire({
                type: 'IS_LOADING_DATA',
                payload: true
            });

            let d =  [{value: "模拟数据" }];
            setTimeout(()=> {

                fire({
                    type: 'IS_LOADING_DATA',
                    payload: false
                });

                fire({
                    type: 'FETCH_LIST_DATA_SUCCESS',
                    payload: d
                });
            }, 2000);
        }
    }
});
默认的启动命令 APP_START

框架内置了程序的启动命令,希望在action和reducer里对改命令进行处理,做程序的数据初始化操作

import {APP_START} from '@ali/qdux';
addAction({
    type: APP_START,
    payload: 'initValue'
})

addReducer({
    value(state="", action){
        if(action.type == 'APP_START') {
            return action.payload;
        }
        return state;
    }
})

app 文件

app为程序的入口View文件,和一般的view并无任何区别,
通过Starter.run(app)后, app里会增加reduer里的所有属性
在代码里直接获取即可

import {View, Text, Button} from 'nuke';
import {createElement, Component, render} from 'rax';
import {fire} from '@ali/qdux';

class Counter extends Component {
    onClick=(v)=> {
        fire({
            type: 'BUTTON_CLICK',
            payload: v
        })
    }
    render() {

        return (
            <View style={{flex:1,flexDirection: 'row',justifyContent: 'flex-start'}}>
                <Button onPress={() => this.onClick(-1)}>减少</Button>
                <Text>{this.props.value}</Text>
                <Button onPress={() => this.onClick(1)}>增加 </Button>
            </View>
        );
    }
}

module.exports = Counter;

更多的例子可以查看example里的例子。

在千牛里使用redux-cow框架

千牛5.10.0以后已经内置redux-cow,
如果在开发里需要使用redux-cow修改webpack.config.js,
externals里增加”redux-cow”: “commonjs redux-cow”即可。
不需要安装redux-cow

使用自带的例子

例子使用qap-cli开发,执行以下命令既可以看到响应的例子

npm install qap-cli -g
git clone  https://github.com/cowjs/redux-cow.git
cd ./examples
npm install
qap debug

最后

本框架暂时只支持rax, 将在下一步支持react
更多例子源码请查看: https://github.com/cowjs/redux-cow/tree/master/examples/rax/src

时间: 2024-09-20 06:00:48

REDUX-COW开发框架介绍的相关文章

最流行的Node.js精简型和全栈型开发框架介绍_node.js

快速开发而又容易扩展,高性能且鲁棒性强.Node.js的出现让所有网络应用开发者的这些梦想成为现实.但是,有如其他新的开发语言技术一样,从头开始使用Node.js的最基本功能来编写代码构建应用是一个非常划不来的耗时的事情.这个问题的解决方案非常简单且已经经受起时间的考验:使用一个已经提前打造好的开发框架.因此才会有如此多的如Express.js,Koa,Sails.js等框架的概念提出来并加以实现. 这些开发框架的角色非常简单.就是要去为应用开发人员节省时间,让我们不用话费太多精力在一些不必要的

Winform开发框架之权限管理系统的改进

权限管理系统,一直是很多Mis系统和一些常见的管理系统所需要的,所以一般可以作为独立的模块进行开发,需要的时候进行整合即可,不需要每次从头开发,除非特殊的系统需求.我在Winform开发框架介绍中的随笔中,很早之前在<Winform开发框架之权限管理系统>就写过关于我的通用权限管理系统的一些介绍,当时这个版本的还是传统样式的,界面如下所示.   由于我的Winform开发框架需要,我把权限管理系统.字典管理模块.分页控件等都扩展了支持传统样式.DotNetBar控件样式,以及DevExpres

Winform开发框架之终极应用

在前面两篇随笔,都围绕着我的Winform开发框架介绍一些重要的组件,如字典模块封装<Winform开发框架之字典数据管理>和权限管理系统模块封装<Winform开发框架之权限管理系统>.本框架主要的功能如下面的图示所介绍的内容:包括紧密结合Database2Sharp强大的一键解决方案代码生成工具.高度抽象继承及使用泛型支持多数据库的开发框架.集成权限管理系统模块.集成字典数据管理模块.集成强大的分页控件.集成OutLookBar界面控件.集成多文档界面Weifengluo布局控

使用Windows DNA 设计、部署和管理一个可伸缩的电子商务网站(2)--来自M$

window|电子商务|设计|伸缩 记住记录需要大量的信息,这将允许我们对其他的服务使用那些资源.点击okey.下一个更改是直接进入注册中,工作于注册中的任何时间,记住你想要遵循人们常常讨论的这样一个规则,做一个你的注册的备份并从这个备份中工作. 当然我们要在这个演示中打破这个规则.我们打开这个注册并且我们的第一个设置被设置为TCP参数.我们不想用完用户端口,于是我们将其设置得非常大.一个大的窗口尺寸对于高速网络工作的更好并且当窗口填满后TCP就停止了. 接下来,我们进入H关键字区域计算机系统(

阿里云前端周刊 - 第 16 期

推荐 1. 神经网络入门 http://www.ruanyifeng.com/blog/2017/07/neural-network.html 眼下最热门的技术,绝对是人工智能,人工智能的底层模型是"神经网络"(neural network).许多复杂的应用(比如模式识别.自动控制)和高级模型(比如深度学习)都基于它.学习人工智能,一定是从它开始. 2. React Redux 概念与工作流清单 https://github.com/uanders/react-redux-cheats

阿里云前端周刊 - 第 17 期

推荐 1. Styled-Components 实战 http://www.ruanyifeng.com/blog/2017/07/neural-network.html Styled-Components 是由 Max Stoiber 与 Glen Maddern 创建的新的 CSS-in-JS 工具库,能够帮你组织 React 或者 React Native 项目中的样式声明.本文则着眼于介绍 Styled-Components 的设计理念与基本用法,首先介绍了 Styled-Compone

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

邮件代收代发功能模块的操作界面设计和阶段性总结

大约半年前,一个客户希望给他开发一个代收代发的功能模块,只需要一个后台的服务进行自动收取和发送邮件,因此我结合了我自己的定时服务程序,增加了一个基于Lumisoft组件的邮件发送和收取插件模块,整合了一个邮件的代收代发的自动化服务程序.做完这些程序的开发,也撰写了好几篇的技术随笔文章,感觉也有一定的成就感. 基于Lumisoft的技术随笔如下: 基于Lumisoft.NET组件的SMTP账号登陆检测 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决 基于Lumisoft.NET组件的

Tiny开发框架PPT介绍

我有一个梦想,那就是那一个NB的开发框架,让使用它的企业成本下降,让使用它的软件工程师轻松快乐.有人问我,你觉得smart框架与Tiny相比怎么样?我的回答是:smart是一个非常棒的框架.有人把JFinal的特性贴出来问我,你觉得Tiny框架与JFinal比怎么样?我的回答是:JFinal是一个非常出色的框架.不同的框架有不同的目标定位,有不同的目标群体,只要是使有者觉得不错,那就是合适的,就是好的.也有人非让我把Tiny框架和其它开源框架比较到底差异在哪里?这个问题确实不太好回答,于是我回答