Skip to content

Commit

Permalink
feat(omi): Function component is supported! 🎉
Browse files Browse the repository at this point in the history
  • Loading branch information
dntzhang committed Jan 12, 2024
1 parent 8719ef9 commit aa7143d
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 10 deletions.
2 changes: 1 addition & 1 deletion packages/omi/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "omi",
"version": "7.4.6",
"version": "7.5.0",
"scripts": {
"start": "vite",
"dev-vite": "vite",
Expand Down
6 changes: 3 additions & 3 deletions packages/omi/src/diff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@ function idiff(
}

let vnodeName = vnode.nodeName
if (typeof vnodeName !== 'string') {
vnodeName = (vnodeName as Component).tagName
}
// if (typeof vnodeName !== 'string') {
// vnodeName = (vnodeName as Component).tagName
// }

// Tracks entering and exiting SVG namespace when descending through the tree.
isForeignObject = vnodeName === 'foreignObject'
Expand Down
2 changes: 1 addition & 1 deletion packages/omi/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ export { Signal } from './signal'
export { css } from './css-tag'
export { mixin } from './options'
export { registerDirective } from './directive'
export const version = '7.4.6'
export const version = '7.5.0'
7 changes: 2 additions & 5 deletions packages/omi/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,8 @@ export function isSameNodeType(node: ExtendedElement, vnode: VNode): boolean {
if (typeof vnode === 'string' || typeof vnode === 'number') {
return node.splitText !== undefined
}
const nodeName = (vnode as ObjectVNode).nodeName
return isNamedNode(
node,
typeof nodeName !== 'string' ? (nodeName as Component).tagName : nodeName,
)

return isNamedNode(node, (vnode as ObjectVNode).nodeName as string)
}

/**
Expand Down
9 changes: 9 additions & 0 deletions packages/omi/src/vdom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,17 @@ export function createElement(
}
}

// fragment component
if (nodeName === Fragment) {
return children
} else if (typeof nodeName === 'function') {
if ((nodeName as unknown as Component).tagName) {
// class component
nodeName = (nodeName as unknown as Component).tagName
} else {
// function component
return nodeName(attributes)
}
}

const p: VNode = {
Expand Down
24 changes: 24 additions & 0 deletions packages/omi/test/base.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -441,4 +441,28 @@ describe('base', () => {
expect(parentElement.firstChild.shadowRoot.firstChild.firstChild.shadowRoot.innerHTML).toBe('<span>a</span>')

})

it('rendering function', () => {

function ChildComponent(props) {
return (
<span>{props.msg}</span>
)
}

class ParentComponent extends Component {
render() {
return (
<div>
<ChildComponent msg="omi" />
</div>
)
}
}
let node = genNode()
define(node.name, ParentComponent)
render(<ParentComponent />, parentElement)
expect(parentElement.firstChild.shadowRoot.firstChild.innerHTML).toBe('<span>omi</span>')

})
})

0 comments on commit aa7143d

Please sign in to comment.