Undo doesn't work after a Component's innerHTML is changed
UndoManager tracks component state changes, not its DOM. This should work in your case element.components('Hello Planet')
Read full answer below βQuestion
GrapesJS version
- I confirm to use the latest version of GrapesJS
What browser are you using?
Latest
Reproducible demo link
https://jsfiddle.net/condsjm1/
Describe the bug
How to reproduce the bug?
- Change a Component's innerHTML
- Press CTRL + Z
What is the expected behavior? To undo the content
What is the current behavior? Doesn't undo the content
Description:
On the fiddle, press the button that says 'Change to Hello Planet' and then select the editor and press CTRL + Z
and the undo won't work (nor the redo), but if you change the 'Hello World' text normally it works fine.
I think I'm changing the content wrong? and if so what's the best way to change a component's content and emulate the native behaviour
Code of Conduct
- I agree to follow this project's Code of Conduct
Answers (3)
UndoManager tracks component state changes, not its DOM.
This should work in your case element.components('Hello Planet')
@artf Thanks!
Thanks for reporting this, @leo-budgetsimple.
Great question about Undo doesn't work after a Component's innerHTML is changed. The recommended approach with UndoManager is to use the event-driven API.
Start here:
- Check the GrapesJS documentation for your specific module
- Look for the
on()event listener method - Most operations can be achieved by listening to editor and component events
Common patterns:
// Listen for changes
editor.on('change', () => console.log('something changed'));
// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));
If you're still stuck:
- Share a minimal CodeSandbox reproduction
- Include what you've already tried
- Mention your GrapesJS version
- The community is here to help!
Related Questions and Answers
Continue research with similar issue discussions.
Issue #6143
BUG/[QUESTION]: How to correctly wrap a Component on add/mount?
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v128 Reproducible demo link https:/...
Issue #5742
Building on Windows 10+
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v122 Reproducible demo link N/A Des...
Issue #5632
Add a change to the undomanager
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v91 Reproducible demo link https://...
Issue #5631
Undo manager add() not working as expected
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v91 Reproducible demo link -- Descr...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins βPremium plugins ship with support, regular updates, and production-ready features β save days of integration work.
Browse premium plugins βRelated tutorials
In-depth guides on the same topic.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Tutorial
GrapesJS vs Webflow vs Tilda: What to Choose for Your Business in 2026
Choosing the right website platform in 2026 is no longer just about building a site
Tutorial
GJS Market 2.0 - Donations, Tracking, Labels and Better Product Discovery
Weβve rolled out a new set of GrapesJS marketplace updates across GJS Market, focused on improving how creators distribute products
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.