Skip to content

Releases: TalkingData/rxloop

v1.0.0-alpha.4

15 Nov 12:44
Compare
Choose a tag to compare
v1.0.0-alpha.4 Pre-release
Pre-release

主要变更

  1. 将 epic 重命名为 pipe,pipe 更能直观形象的体现数据的流动性。
  2. 新增了 call 操作符,便于执行异步函数,捕获异常和取消慢请求;
  3. 改进了错误处理机制,之前的版本如果异步过程报错,整个数据流会失效。
  4. 获取执行上下文的信息,在状态发生变更时,可以获取变动的原因。

Break Changes

  1. 在定义 model 时,不再使用 epics 来定义异步修改器,在后续的版本中请使用 pipes 替代。

  2. 在每个 pipe 中,第二个参数改为操作符对象,可以直接用解构的方式获取操作符和常用函数,alpha.3 之前的版本:

    {
      reducers: {},
      epics: {
        epicOne(action$, cancel$) {}
      }
    }

    新版本变更为:

    {
      reducers: {},
      pipes: {
        pipeOne(action$, { cancel$, map, call, dispatch }) {}
      }
    }

    在跨 model 发送数据时,原来通过 this.dispatch 的方式不建议使用,推荐直接用 dispatch 函数。

New Features

  1. 新增了 call 操作符,可以在管道中执行异步函数,之前的版本需要借助 RxJS 操作符,比较繁琐。新的 call 操作符,还可以方便的通过 dispatch 方法取消。
const user: Model = {
  name: 'user',
  state: { name: '' },
  reducers: {},
  pipes: {
    getInfo(action$, { call }) {
      return action$.pipe(
        call(async () => {
          return { type: 'info', name: 'wxnet' }
        }),
      )
    }
  },
};

取消请求:

store.dispatch({
    type: 'test/pipeOne/cancel',
});
  1. 新增了执行上下文实例属性,可以获取引起当前状态变化的原因,是由 Reducer 还是 Pipe 引发的.

    const store = rxloop();
    store.model({
        name: 'test',
        state: {},
        reducers: {
            c(state) { return state }
        },
        pipes: {
            a() {},
            b() {}
        }
    });
    
    store.stream('test').subscribe(() => {
        const { source, pipe } = store.context.test;
        console.log( source );
        console.log( pipe.a );
        console.log( pipe.b );
    });

Improvements

  1. 改进了错误处理机制,在 call 操作符中的请求异常,不会中断 pipe 的执行(#5

    import rxloop from '@rxloop/core';
    
    const store = rxloop();
    
    store.model({
        name: 'test',
        state: {},
        reducers: {},
        pipes: {
            pipeOne(action$, { call }) {
                return action$.pipe(
                    call(async () => {
                      throw 'error'  
                    })
                )
            }
        }    
    });
    
    store.stream('test').subscribe((state) => {
      if (state.error) {
        console.log(state.error);
        return;
      }
      // render(state);
    });

v1.0.0-alpha.2

02 Nov 07:17
Compare
Choose a tag to compare
v1.0.0-alpha.2 Pre-release
Pre-release

Features

  • Record the source of the state change (a81d842)

v1.0.0-alpha.1

01 Nov 03:50
Compare
Choose a tag to compare
v1.0.0-alpha.1 Pre-release
Pre-release

Goals

  1. Elm concept;
  2. Compatible with Redux's Store interface;
  3. Support plugins;