# March 3, 2021 Still TODO: - Wire up Nodebuilder to track listeners as they are added. (easyish) - Wire up attrs on nodes to track listeners properly - Could be done in the nodebuilder where the attrs are added automatically (easyish) - Could just inject context into the diffing algorithm (hardish) - Wire up component syntax (easy) - Wire up component calling approach (easyish) - Wire up component diffing (hardish) Approach: - move listeners out of vnode diffing - move listeners onto scope via nodebuilder - instead of a listeners list, store a list of listeners and their IDs - this way means the diffing algorithm doesn't need to know that context - This should fix our listener approach - The only thing from here is child component Thoughts: - the macros should generate a static set of attrs into a [attr] array (faster, more predictable, no allocs) - children should be generated as a static set if no parans are detected - More complex in the macro sized, unfortunately, not *too* hard - Listeners should also be a static set (dynamic listeners don't make too much sense) - use the builder syntax if you're doing something wild and need this granular control - Tags should also be &'static str - no reason to generate them on the fly Major milestones going forward: - Scheduled updates - String renderer (and methods for accessing vdom directly as a tree of nodes) - good existing work on this in some places - Suspense - Child support, nested diffing - State management - Tests tests tests Done so far: - websys - webview - rsx! macro - html! macro - lifecycles - scopes - hooks - context API - bump ## Solutions from today's thinking session... ### To solve children: - maintain a map of `ScopeIdx` to `Node` in the renderer - Add new patch commands - traverse_to_known (idx) - Pop known component onto stack (super easy) - add_known (idx) - Save top of stack as root associated with idx - remove_known (idx) - Remove node on top of stack from known roots - ... Something like this - Continue with BFS exploration of child components, DFS of VNodes - Easier to write, easier to reason about ### To solve listeners: - Map listeners directly as attrs before diffing via a listenerhandle - Evaluation of nodes is now stateful where we track listeners as they are added