Frontmatter
| id | 8972 |
| title | refactor: Switch Grid Row to explicit updateContent pattern (#8964) |
| state | Closed |
| labels | airefactoring |
| assignees | tobiu |
| createdAt | Feb 3, 2026, 10:12 PM |
| updatedAt | Feb 3, 2026, 10:14 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8972 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 3, 2026, 10:14 PM |
refactor: Switch Grid Row to explicit updateContent pattern (#8964)
tobiu assigned to @tobiu on Feb 3, 2026, 10:12 PM

tobiu
Feb 3, 2026, 10:14 PM
Input from Gemini 3 Pro:
✦ I have successfully refactored the Grid Row architecture to use an explicit
updateContentpattern.
- Converted
recordandrowIndexto non-reactive configs.- Implemented
Row.updateContentfor synchronous state updates and VDOM generation.- Updated
GridBody.createViewDatato unconditionally update all visible rows using this new method.This removes the brittleness of the reactive config system for this high-performance use case and ensures that rows always reflect the latest state, solving the issue with empty columns after scrolling.
tobiu closed this issue on Feb 3, 2026, 10:14 PM
The current reactivity model for
Neo.grid.Rowusingrecord_androwIndex_reactive configs has proven brittle and prone to race conditions, update loops, and stale data (e.g., columns disappearing after scrolling).Proposed Architecture:
record_androwIndex_to standard non-reactive configs inNeo.grid.Row.updateContent({record, rowIndex})inNeo.grid.Row.createVdom().createViewDatato callrow.updateContent()directly for every row in the view window.forceparameter logic asupdateContentwill always force a VDOM generation.Tasks:
src/grid/Row.mjs:record_torecord.rowIndex_torowIndex.afterSetRecord.updateContent(data).src/grid/Body.mjs:createViewDatato useitem.updateContent({record, rowIndex}).forceparameter usage.