Redux繁琐模板写法解决方案

栏目: IOS · Android · 发布时间: 4年前

内容简介:创建配置@注: 使用ts及class是为了代码提示方便,如果不需要可参考js版使用配置
  • Redux本身函数式编程风格带给我们的是代码足够的简单,没有任何的黑魔法,完全就是一个一个的纯函数,基于此特性决定不更换Redux本身。
  • 在学习Redux文档的过程中,有一节讲的是缩减样本代码,受此文章的启发,决定尝试能不能根据配置生成需要的 action``reducer``saga
  • 对比模板文件发现action本身可以不存在,只是为了将各个地方的代码联系起来,方便代码阅读和维护,基于此可以考虑直接使用一个方法生成 actionreducer
  • 同时为了集成 saga ,又不破坏原有的耦合特性,故采用约定大于配置,在action的方法名前加 _ 的方式。
  • 在尝试过程中发现为了所需的配置模板的风格与Dva甚是相似,怀疑过是不是与Dva的功能重复,期间学习过Dva的代码,发现还是出发点不一样。
  • 本解决方案没有任何的黑魔法,只是换了一种代码组织方式,将 action``reducer``saga 的功能集中于一处,不需要任何的附加api学习成本。

Installation

  • Using npm: npm install redux-template --save
  • Using Yarn: yarn add redux-template

Example

创建配置

@注: 使用ts及class是为了代码提示方便,如果不需要可参考js版

import {creator, BaseConfig} from "./reduxFactory";

class Test extends BaseConfig {
  namespace = 'test';

  initState = {
    num: 1
  };

  add = (payload: {
    number: number
  }, state?: any) => {
    return {
      num: state.num + payload.number
    }
  };

  _add = function *() {
    yield console.log('啦啦啦');
  };
}

export default creator<Test>(new Test());
复制代码

使用配置

// reducer
import { combineReducers } from 'redux'
import Test from "../Test";

export default combineReducers({
  test: Test.reducer
})

// saga
import {all} from "redux-saga/effects";
import Test from '../Test';

export default function* () {
  yield all([
    Test.saga()
  ]);
};
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

互联网+ 战略版

互联网+ 战略版

刘润 / 中国华侨出版社 / 2015-5-1 / 49.8

1、“互联网+”上升为国家战略,“互联网+”成为下一个超级畅销书的热点话题在商业环境巨变的今天,传统企业该怎么走?传统企业转型是一个系统工程,如何定战略、抓主要矛盾? 2、首本“互联网+传统企业”的战略指导书。“我互联网+”时代到来了,传统企业的外部环境发生了哪些变化?了解商业新生代的新商业环境,跟之前工业时代的不同,从战略上指导传统企业转型,更安全也更大局把握游刃有余。一起来看看 《互联网+ 战略版》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换