来推销一个自己为 redux + optimistic UI 做的中间件

2017-04-17 12:56:00 +08:00
 otakustay

https://www.npmjs.com/package/redux-optimistic-thunk

看个效果( 4.4MB 图片):

实现上面这个效果的核心代码是这样的:

import uid from './uid';

let delay = time => new Promise(resolve => setTimeout(resolve, time));

export let newItem = item => ({type: 'NEW_ITEM', item: item});

export let saveItem = text => [
    async (dispatch, getState) => {
        await delay(getState().delay);

        dispatch(newItem({text: text, id: uid(), pending: false, deleted: false}));
    },
    dispatch => dispatch(newItem({text: text, id: uid(), pending: true, deleted: false}))
];

export let deleteItem = id => ({type: 'DELETE_ITEM', id: id});

export let setDelay = delay => ({type: 'SET_DELAY', delay: delay});

可以看到所有的代码都是正常的业务逻辑,saveItem就是返回个 2 段业务逻辑组成的数组,和redux-optimistic-ui这种满世界要写metatransactionID的比起来干净了很多,开发者就专注写逻辑不要关心什么事务、提交、回滚……

自认这是当前 redux 社区里最好的 optimistic 中间件了

更详细的分析可以看我的博客: http://otakustay.com/publish-redux-optimistic-thunk/

1827 次点击
所在节点    分享发现
3 条回复
jsq2627
2017-04-17 14:13:24 +08:00
你这个 gif 让我 ios 的 chrome 崩溃了
otakustay
2017-04-17 14:18:03 +08:00
@jsq2627 yes 我的 7Plus 的 Chrome 也会崩,没办法……
nino
2017-04-17 19:44:01 +08:00
先赞一个再看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX