Releases: TalkingData/rxloop
Releases · TalkingData/rxloop
v1.0.0-alpha.4
主要变更
- 将 epic 重命名为 pipe,pipe 更能直观形象的体现数据的流动性。
- 新增了 call 操作符,便于执行异步函数,捕获异常和取消慢请求;
- 改进了错误处理机制,之前的版本如果异步过程报错,整个数据流会失效。
- 获取执行上下文的信息,在状态发生变更时,可以获取变动的原因。
Break Changes
-
在定义 model 时,不再使用 epics 来定义异步修改器,在后续的版本中请使用 pipes 替代。
-
在每个 pipe 中,第二个参数改为操作符对象,可以直接用解构的方式获取操作符和常用函数,alpha.3 之前的版本:
{ reducers: {}, epics: { epicOne(action$, cancel$) {} } }
新版本变更为:
{ reducers: {}, pipes: { pipeOne(action$, { cancel$, map, call, dispatch }) {} } }
在跨 model 发送数据时,原来通过
this.dispatch
的方式不建议使用,推荐直接用dispatch
函数。
New Features
- 新增了 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',
});
-
新增了执行上下文实例属性,可以获取引起当前状态变化的原因,是由 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
-
改进了错误处理机制,在 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
Features
- Record the source of the state change (a81d842)
v1.0.0-alpha.1
Goals
- Elm concept;
- Compatible with Redux's Store interface;
- Support plugins;