我们的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 );
}
};
}