diff --git a/packages/csx/src/vdom/render.js b/packages/csx/src/vdom/render.js index c7956e8..36dcee5 100644 --- a/packages/csx/src/vdom/render.js +++ b/packages/csx/src/vdom/render.js @@ -68,6 +68,10 @@ export function render(vnode, opts = {}) { if (!item.host) { item.host = renderer.create(item); newlyCreated = true; + + if(item.vnode?.props?.ref){// If props specify a ref-function, queue it to be called at the end of the render + state.refs.push([item.vnode.props.ref,item.host]); + } } // Update the element @@ -231,5 +235,9 @@ export function render(vnode, opts = {}) { if(!item.parent) newRoot = item.host; } } + + for(let [refCb, refItem] of state.refs){ + refCb(refItem); + } return newRoot; } diff --git a/packages/csx/src/vdom/renderers/nodetree.js b/packages/csx/src/vdom/renderers/nodetree.js index 0ecfbf6..4ed6bef 100644 --- a/packages/csx/src/vdom/renderers/nodetree.js +++ b/packages/csx/src/vdom/renderers/nodetree.js @@ -10,6 +10,7 @@ const VNODEPROP_EXCLUDE_DIRECT = { }; const VNODEPROP_IGNORE = { ['key']: true, + ['ref']: true }; /**