如何实施'撤消'对象编辑而不在Redux商店中存储实际对象?

时间:2017-12-16 22:03:39

标签: javascript react-redux undo

我们的React / Redux应用程序使用javascript 3D库(three.js)并允许编辑该库中的对象。

到目前为止,我们通过抽象资产层并强制执行Object3D repo的控制器访问而不是将Object3D存储在Redux存储中来避免将应用程序耦合到three.js。

但现在我们正在考虑实施'撤消/重做'特征。看起来,为了使用Redux实现Undo(使用,例如.red还 - 撤消),有必要违反我们的封装并简单地在商店中放置three.js对象以便撤消工作(最后过去'州取代现在的状态)。

我能想到的另一种方法是将对象的视图模型存储在Redux存储中,并让观察者监听视图模型的更改,在这种情况下,对象将被回滚/重置。这将是一个额外的处理,因为每次Redux状态改变时观察者都会被戳(除非观察者是React组件)。

如果不滚动我们自己的抽象命令和历史列表,还有其他方法吗?

我们当前的流程使用thunk中间件:

function updateObjectProperty(id, path, value) {
  return function( dispatch, getState, controllers) {
    try {
      controllers.assetController.updateAsset(id, path, value)
      .then ( () => {
        ...
        dispatch( updateObject(id, etc) )
        .then ( () => {
           //do other stuff
        });
     } catch(error) {
         dispatch( failObjectUpdate( etc );
     }
   };
  }

0 个答案:

没有答案