Wie kann ich machen Undo/Redo Vuex verwenden? Ich arbeite an einem ziemlich komplexen App und Vue Entwickler-Tools hat mir sehr geholfen zwischen Zustand zu schalten, so möchte ich diese Funktion auf meiner App. Wie kann ich das erreichen?zurück zu Staaten wie Undo Redo auf Vue.js Gehen vuex
0
A
Antwort
4
Ich habe implementiert Undo-Redo wie folgt:
1) für vuex
const undoRedoPlugin = (store) => {
// initialize and save the starting stage
undoRedoHistory.init(store);
let firstState = cloneDeep(store.state);
undoRedoHistory.addState(firstState);
store.subscribe((mutation, state) => {
// is called AFTER every mutation
undoRedoHistory.addState(cloneDeep(state));
});
}
2) ein Plugin erstellen verwenden das Plugin
new Vuex.Store({
...
plugins: [undoRedoPlugin]
});
3) speichern eine Geschichte von die Zustände in undoRedoHistory
class UndoRedoHistory {
store;
history = [];
currentIndex = -1;
init(store) {
this.store = store;
}
addState(state) {
// may be we have to remove redo steps
if (this.currentIndex + 1 < this.history.length) {
this.history.splice(this.currentIndex + 1);
}
this.history.push(state);
this.currentIndex++;
}
undo() {
const prevState = this.history[this.currentIndex - 1];
// take a copy of the history state
// because it would be changed during store mutations
// what would corrupt the undo-redo-history
// (same on redo)
this.store.replaceState(cloneDeep(prevState));
this.currentIndex--;
}
redo() {
const nextState = this.history[this.currentIndex + 1];
this.store.replaceState(cloneDeep(nextState));
this.currentIndex++;
}
}
const undoRedoHistory = new UndoRedoHistory();
4) verwenden Sie es
undoRedoHistory.undo();
...
undoRedoHistory.redo();
Wenn Ihr Zustand in der Größe als das Klonen nicht sehr groß ist, dass ein guter Ansatz besagt ist.
5
See: https://vuex.vuejs.org/en/api.html
Sie verwenden subscribe(handler: Function)
easely können eine Funktion zu registrieren, die alle Staaten halten Sie von einem bestimmten Shop wollen in einem Array.
Dann können Sie einen beliebigen gespeicherten Status in diesem Array verwenden, indem Sie sie als Argument an replaceState(state: Object)
übergeben.
Verwandte Themen
- 1. undo/redo event binding
- 2. Undo/Redo in WPF?
- 3. Undo/redo Memento-Muster C#
- 4. Undo/Redo mit kaskadierenden Löschungen
- 5. Undo Redo in Eclipse E4
- 6. ActionScript - Allgemeine Undo/Redo-API?
- 7. Android Bitmap Undo Redo-Effekt
- 8. Basic Undo/Redo Logik mit Verschlüsse
- 9. undo/redo mit geschütztem Text in RichTextBox
- 10. VIM, SnipMate bricht die Undo/Redo Geschichte
- 11. Farbauswahl funktioniert nicht mit Undo und Redo
- 12. Problem bei der Implementierung von Undo/Redo
- 13. (Undo/Redo || KeyStrokes) funktioniert nicht in JEditorPane
- 14. Probleme mit "Redo/Undo" -Funktion (MFC, C++)
- 15. Undo/Redo funktioniert nicht in android Canvas
- 16. Wie Implementieren undo/redo in einer MVVM-Anwendung implementieren?
- 17. Muster zum Implementieren von Undo/Redo in Clojure
- 18. Vue.js [vuex] Wie aus einer Mutation zu versenden?
- 19. Undo und Redo in WYSYWYG contentEditable in SWT funktioniert nicht
- 20. Handle Strg + Z (undo/redo) für Texteditor in Einzelseitenanwendung
- 21. Vue.js automatische Kündigung von Vuex Store
- 22. textarea: Taste zum Auslösen des nativen Undo/Redo
- 23. (Vue.js + VUEX) innerhalb Aktion Commit versprechen, nicht
- 24. Undo und Redo Funktionalität in android Zeichnung App mit Canvas
- 25. Undo Enumerable.AsParallel(), geht zurück zu seriellen Modus
- 26. Emberjs gehen auf Abbrechen zurück
- 27. wie man den Undo/Redo-Vorgang ohne größere Änderungen im Programm implementiert
- 28. Wie implementiere ich ein einfaches Undo/Redo für Aktionen in Java?
- 29. jquery Animationen zurück zur ursprünglichen css Staaten
- 30. Undo-Implementierung - DOM-Manipulationen