Frontmatter
| id | 8984 |
| title | Fix Grid Row Reactivity & AnimatedChange Column for In-Place Updates |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Feb 4, 2026, 2:09 PM |
| updatedAt | Feb 4, 2026, 2:22 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8984 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8964 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 4, 2026, 2:22 PM |
Fix Grid Row Reactivity & AnimatedChange Column for In-Place Updates
tobiu added parent issue #8964 on Feb 4, 2026, 2:10 PM

tobiu
Feb 4, 2026, 2:21 PM
Input from Gemini 3 Pro:
✦ I have applied the fix for in-place record updates and animations.
Changes:
src/grid/Body.mjs: InonStoreRecordChange, we now explicitly callrow.createVdom(). This is necessary because in-place updates (likerecord.counter++) do not change the record object reference, so the reactive config system would otherwise skip the update.src/grid/column/AnimatedChange.mjs: RefactoredonRecordChangeto work with the new Row architecture.
- It now correctly calculates the
Rowcomponent instance based on the record index and pool size.- It modifies the VDOM of that specific
Rowinstance.- It triggers
row.update()instead of the globalbody.update(), ensuring efficient, granular rendering.I have pushed the changes to the feature branch.
tobiu assigned to @tobiu on Feb 4, 2026, 2:21 PM
tobiu closed this issue on Feb 4, 2026, 2:22 PM
Problem: In the BigData grid example, the "Increase Counter" button modifies a record property in place (
record.counter++), but the UI does not update.Causes:
Neo.grid.Rowarchitecture relies on reactive config changes to trigger updates. Since the values are strictly equal,row.record = recorddoes not triggerafterSetRecord, and thus no VDOM update occurs.AnimatedChangecolumn implementation is obsolete. It currently attempts to find the cell node withinbody.vdomand callbody.update(). With the new architecture, the Body VDOM is a container of Row components, not the full cell markup. The column needs to target the specificRowcomponent's VDOM and trigger a row-level update.Solution:
GridBody.onStoreRecordChangeto explicitly callrow.createVdom()when a record is modified, ensuring the new data is rendered even if the record reference hasn't changed.src/grid/column/AnimatedChange.mjsto:Rowcomponent instance.row.update()instead ofbody.update().