【问题标题】:React Native programming undo/redoReact Native 编程撤消/重做
【发布时间】:2016-06-18 05:08:12
【问题描述】:

我想知道编程撤消和重做的基本原理是什么?特别是在 React Native 中。我是一个初学者程序员,我无法弄清楚如何对撤消进行编程,因为它只是颠倒任何东西。

以单人纸牌游戏为例,您可以将一张牌放在其中一排牌的末端,只需将一张牌翻过来放在源牌堆中,或者将牌堆中的一张牌放在王牌堆上。这些都很容易编程,但是你将如何实现一个简单的“撤消”按钮来反转这些动作中的任何一个?并且可能无限。

【问题讨论】:

  • 您可以将状态保留在一个数组中,并在向前移动时向数组中添加一个新元素,当您撤消时,您可以简单地删除数组的最后一个元素,或者向后移动一。
  • 我猜是这样,但是对于所有可能的不同类型的运动,您必须有几种不同的状态。我只是想知道基本概念是如何编程的。就像在 Photoshop 中一样,实际上您可以做十亿种不同的事情,然后只需单击撤消即可撤消任何一项。您必须记录每个可能操作的状态。
  • @Hasen,是的,这正是他们所做的。整个应用程序中的每个动作都有一个知道如何“执行”该动作以及如何“撤消”该动作的功能。这些存储在列表中作为用户选择选项并执行更改
  • 好的,感谢您的帮助。我想我现在明白了。

标签: ios react-native undo


【解决方案1】:

如何维护状态的基本示例

http://redux.js.org/docs/recipes/ImplementingUndoHistory.html

let state = {
  past:[],
  present: 0,
  future: [],
};

const canUndo = state.past.length > 0;
const canRedo = state.future.length > 0;

const updateState = function(value) {
  state.past = state.present;
  state.present = value;
};

const undo = function() {
  state.future.push(state.present);
  state.present = state.past.pop();
};

const redo = function() {
  state.past.push(state.present);
  state.present = state.present.pop();
};

一个为你提供重做/撤消的 redux 插件

https://www.npmjs.com/package/redux-undo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-08-04
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多