View on GitHub

tangdao

唐刀是一款基于 redux + redux-saga 以 model 为核心的数据流管理工具,它将 store 和 saga 统一为 model 的概念,写在一个 js 文件中,以对象配置的概念维护 state、 reducers、effects 等。

redux + redux-saga 项目接入指南


安装

npm install @maoyan/tangdao --sava

初步迁移

初步迁移只是使用唐刀替代原始的数据流工具,不需要将数据流方案完全改造,因为唐刀可以与 redux 应用共存。

首先将项目中创建 redux store 的相关初始化工作按照唐刀初始化配置进行配置,然后将创建 store 的方式的改为唐刀,可以使用 td.start 或者 td.getStore 两个实例方法。

创建应用

将项目中与创建 store 相关的参数通过配置传入唐刀,创建应用。

import tangdao, { loading } from '@maoyan/tangdao';

// 以下配置,如果项目有用到就传进去,没有就不传,另外唐刀还提供其他配置,详情请查看具体文档
const td = tangdao({
   history, // 可选项,需要就传,唐刀内置了 hashHistory
   initialState: initialState, // 创建 store 时的初始状态值
   extraReducers: reducers, // reducer, 以 key-value 格式传入
   extraSagas: sagas, // 以数组的格式将你的 saga 传入
   extraMiddleware: function(sagaMiddleware, routerMiddleware) { // 如果你对中间件的执行顺序有要求,那么可以使用函数自己决定中间件执行顺序;否则,可直接传入数组
     return [promiseMiddleware, sagaMiddleware, routerMiddleware];
   }
})

// 如果你的项目需要用到 effect loading 管控,具体配置可见文档
td.use(loading());

生成 store

利用传入的配置,唐刀内部使用 redux.createStore 生成 stroe

const store = td.getStore();
// 或者
td.start('#app');

至此,你已经完成了唐刀的初步迁移,接入过程如果报错,请移步 迁移问题总结

后期可以针对具体的模块进行样板文件的改造


model 的创建

将项目中的模块改造成 model 样板文件, 简要介绍下 model 文件,详情可见 核心概念/model

const model = {
  namespace: 'model', // 设置 namespace,将会对应 store 状态树上的 key
  state: '', // 设置初始状态值
  init: function(actionType, actionCreator) { // 与业务相关的 action 处理,可以返回任何参数,在业务代码中可以通过 useModel('namespace')

  },
  reducers: { // 定义 redux 的 reducer
    key: function(state, { payload } actionCreator) { 

    }
  },
  effects: { // 定义 saga 的副作用
    * key: function({ payload }, sagaEffect, actionCreator) {

    }
  }
}

// 注册 model
td.model(model);
// 或者批量注册
td.model([model])

如何访问某一 model 下的 actionType、actionCreator、autoDispatch。

在业务代码中,可以通过唐刀提供的 useModel 方法访问具体的 model

import { useModel } from '@maoyan/tangdao';

const { actionType, actionCreator, dispatch } = useModel('namespace');

跨 model 访问,可以通过唐刀提供的 getApp 方法访问所有的 model。

import { getApp } from '@maoyan/tangdao';

const model = app.$models;

测试

测试通过即完成 model 样板文件的改造,可以上线