V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
otakustay
V2EX  ›  分享发现

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

  •  
  •   otakustay · 2017-04-17 12:56:00 +08:00 · 1811 次点击
    这是一个创建于 2775 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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/

    3 条回复    2017-04-17 19:44:01 +08:00
    jsq2627
        1
    jsq2627  
       2017-04-17 14:13:24 +08:00 via iPhone
    你这个 gif 让我 ios 的 chrome 崩溃了
    otakustay
        2
    otakustay  
    OP
       2017-04-17 14:18:03 +08:00
    @jsq2627 yes 我的 7Plus 的 Chrome 也会崩,没办法……
    nino
        3
    nino  
       2017-04-17 19:44:01 +08:00
    先赞一个再看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1188 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.