Skip to content

Commit

Permalink
fix: Stateless component should support function returning null.
Browse files Browse the repository at this point in the history
  • Loading branch information
littly committed Mar 15, 2018
1 parent a1988c6 commit 386f07a
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions packages/nerv/src/lifecycle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import {
CompositeComponent,
isComponent,
isInvalid,
VText,
VVoid,
VNode,
VType
} from 'nerv-shared'
import FullComponent from './full-component'
Expand Down Expand Up @@ -51,6 +54,15 @@ function errorHandler (component: Component<any, any>, error) {
}
}

function ensureVirtualNode (rendered: any): VText | VVoid | VNode {
if (isNumber(rendered) || isString(rendered)) {
return createVText(rendered)
} else if (isInvalid(rendered)) {
return createVoid()
}
return rendered
}

export function mountVNode (vnode, parentContext: any, parentComponent?) {
return createElement(vnode, false, parentContext, parentComponent)
}
Expand Down Expand Up @@ -93,7 +105,8 @@ export function mountComponent (
}

export function mountStatelessComponent (vnode: Stateless, parentContext) {
vnode._rendered = vnode.type(vnode.props, parentContext)
const rendered = vnode.type(vnode.props, parentContext)
vnode._rendered = ensureVirtualNode(rendered)
vnode._rendered.parentVNode = vnode
return (vnode.dom = mountVNode(vnode._rendered, parentContext) as Element)
}
Expand All @@ -111,11 +124,7 @@ export function renderComponent (component: Component<any, any>) {
errorCatcher(() => {
rendered = component.render()
}, component)
if (isNumber(rendered) || isString(rendered)) {
rendered = createVText(rendered)
} else if (isInvalid(rendered)) {
rendered = createVoid()
}
rendered = ensureVirtualNode(rendered)
CurrentOwner.current = null
return rendered
}
Expand Down

0 comments on commit 386f07a

Please sign in to comment.