(window.webpackJsonp = window.webpackJsonp || []).push([ [30], { 400: function(t, s, a) { 'use strict'; a.r(s); var n = a(42), r = Object(n.a)( {}, function() { var t = this, s = t.$createElement, a = t._self._c || s; return a('ContentSlotsDistributor', { attrs: { 'slot-key': t.$parent.slotKey } }, [ a('h1', { attrs: { id: '撤销-重做' } }, [ a('a', { staticClass: 'header-anchor', attrs: { href: '#撤销-重做' } }, [ t._v('#'), ]), t._v(' 撤销/重做'), ]), t._v(' '), a('p', [ t._v( '撤销重做我们主要使用了redux-undo这个库,配合Dva使用,具体使用方法参考如下操作:', ), ]), t._v(' '), a('div', { staticClass: 'language-js extra-class' }, [ a('pre', { pre: !0, attrs: { class: 'language-js' } }, [ a('code', [ a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('import')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v(' createLogger '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('from')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token string' } }, [ t._v("'redux-logger'"), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n'), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('import')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v(' message '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('from')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token string' } }, [t._v("'antd'")]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n'), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('import')]), t._v(' undoable'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v(' StateWithHistory '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('from')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token string' } }, [ t._v("'redux-undo'"), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n'), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('import')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v(' Reducer'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' AnyAction '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('from')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token string' } }, [t._v("'redux'")]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n\n'), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('export')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('const')]), t._v(' dva '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('=')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v('\n config'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v('\n onAction'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token function' } }, [ t._v('createLogger'), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token function' } }, [t._v('onError')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), a('span', { pre: !0, attrs: { class: 'token parameter' } }, [ t._v('e'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' Error'), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v('\n message'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), a('span', { pre: !0, attrs: { class: 'token function' } }, [t._v('error')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), t._v('e'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('message'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token number' } }, [t._v('3')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token function-variable function' } }, [ t._v('onReducer'), ]), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), a('span', { pre: !0, attrs: { class: 'token parameter' } }, [ t._v('reducer'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' Reducer'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('<')]), t._v('any'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' AnyAction'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('>')]), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('=>')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('let')]), t._v(' undoReducer '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('=')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token function' } }, [t._v('undoable')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), t._v('reducer'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('return')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('function')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), a('span', { pre: !0, attrs: { class: 'token parameter' } }, [ t._v('state'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' StateWithHistory'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('<')]), t._v('any'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('>')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' action'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' AnyAction'), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('let')]), t._v(' newState '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('=')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token function' } }, [ t._v('undoReducer'), ]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('(')]), t._v('state'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' action'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(')')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('let')]), t._v(' router '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('=')]), t._v(' newState'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('present'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('router '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('?')]), t._v(' newState'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('present'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('router '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' newState'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('present'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('.')]), t._v('routing'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token keyword' } }, [t._v('return')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('{')]), t._v(' '), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v('...')]), t._v('newState'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v(' router'), a('span', { pre: !0, attrs: { class: 'token operator' } }, [t._v(':')]), t._v(' router '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v('\n '), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(',')]), t._v('\n'), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v('}')]), a('span', { pre: !0, attrs: { class: 'token punctuation' } }, [t._v(';')]), t._v('\n'), ]), ]), ]), a('p', [ t._v( '以上我们就实现了全局配置redux-undo,在撤销重做按钮中我们就可以触发对应的方法来实现撤销重做的功能,其次我们还使用了redux-logger来实现redux的日志输出。', ), ]), ]); }, [], !1, null, null, null, ); s.default = r.exports; }, }, ]);