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这种满世界要写meta
和transactionID
的比起来干净了很多,开发者就专注写逻辑不要关心什么事务、提交、回滚……
自认这是当前 redux 社区里最好的 optimistic 中间件了
更详细的分析可以看我的博客: http://otakustay.com/publish-redux-optimistic-thunk/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.