The h function helps you create virtual nodes (vnodes) which represent HTML elements or components in Vue. It lets Vue know what to show on the screen.
h function for creating vnodes in Vue
Introduction
Syntax
Vue
h(tag, props?, children?)
tag can be a string like 'div' or a component object.
props is an optional object for attributes, events, or props.
Examples
Vue
h('div')Vue
h('button', { onClick: () => alert('Clicked!') }, 'Click me')
someProp.Vue
h(MyComponent, { someProp: 123 })Vue
h('ul', null, [h('li', null, 'Item 1'), h('li', null, 'Item 2')])
Sample Program
This Vue component uses the h function to create a button. When clicked, it shows an alert. The button has some simple inline styles.
Vue
import { h, defineComponent } from 'vue'; export default defineComponent({ name: 'HelloButton', setup() { const handleClick = () => alert('Hello from h!'); return () => h('button', { onClick: handleClick, style: { padding: '0.5rem', fontSize: '1rem' } }, 'Say Hello'); } });
Important Notes
The h function is the core way Vue builds its virtual DOM.
Using h gives you flexibility but templates are easier for simple cases.
Remember to use camelCase for event names in props, like onClick.
Summary
The h function creates virtual nodes representing elements or components.
It takes a tag, optional props, and optional children.
Use it inside render functions for dynamic or programmatic UI creation.
Practice
1. What is the primary purpose of the
h function in Vue?easy
Solution
Step 1: Understand the role of
Thehin Vuehfunction is used to create virtual nodes (vnodes) which represent elements or components in Vue's virtual DOM.Step 2: Differentiate from other functions
It does not manipulate the real DOM directly, fetch data, or style components. Its main role is to build the virtual DOM structure.Final Answer:
To create virtual nodes representing elements or components -> Option DQuick Check:
h function = create virtual nodes [OK]
Hint: Remember: h builds virtual nodes, not real DOM [OK]
Common Mistakes:
- Confusing h with direct DOM manipulation
- Thinking h fetches data
- Assuming h styles components
2. Which of the following is the correct syntax to create a
div element with the h function and a class of "container"?easy
Solution
Step 1: Recall the
Thehfunction signaturehfunction takes the tag name as the first argument and an object of props as the second argument.Step 2: Identify correct props syntax
Vue usesclass(notclassName) as the key for CSS classes in the props object.Final Answer:
h('div', { class: 'container' }) -> Option BQuick Check:
h(tag, props) with class key = A [OK]
Hint: Props are an object; use { class: 'name' } [OK]
Common Mistakes:
- Using 'className' instead of 'class'
- Passing class as separate string arguments
- Using array instead of object for props
3. What will be the rendered output of this Vue render function snippet?
return h('ul', null, [
h('li', null, 'Apple'),
h('li', null, 'Banana'),
h('li', null, 'Cherry')
])medium
Solution
Step 1: Understand the structure created by
The outerhhcreates aulelement with an array oflichildren nodes.Step 2: Recognize the children rendering
Eachlivnode contains a string child representing the fruit name, so the final HTML is a list with threeliitems.Final Answer:
<ul><li>Apple</li><li>Banana</li><li>Cherry</li></ul> -> Option AQuick Check:
h with array children = nested elements [OK]
Hint: Array children create nested elements inside parent [OK]
Common Mistakes:
- Thinking children array concatenates text
- Expecting error for array children
- Missing the parent <ul> element
4. Identify the error in this usage of the
h function:
return h('button', { onclick: () => alert('Clicked!') }, 'Click me')medium
Solution
Step 1: Recall Vue event listener naming in
Vue expects event listeners in props to be prefixed with 'on' and camelCase event name, e.g., 'onClick'.hStep 2: Identify the incorrect casing
The code uses 'onclick' with lowercase 'c', which Vue does not recognize as an event listener.Final Answer:
The event handler should be passed as 'onClick' with capital C -> Option CQuick Check:
Event props use camelCase event names [OK]
Hint: Use camelCase event names like 'onClick' in props [OK]
Common Mistakes:
- Using lowercase event names
- Passing event handler as string
- Wrapping handler in array unnecessarily
5. How would you use the
h function to create a ul list from this array of fruits, but only include fruits with names longer than 5 characters?
const fruits = ['Apple', 'Banana', 'Fig', 'Cherry']
hard
Solution
Step 1: Filter fruits by length
Usefilterto keep only fruits with names longer than 5 characters.Step 2: Map filtered fruits to
Uselivnodesmapto convert each filtered fruit into anlivnode with the fruit name as child.Step 3: Pass the array of
This creates alivnodes as children toululwith only the desired fruits as list items.Final Answer:
h('ul', null, fruits.filter(f => f.length > 5).map(f => h('li', null, f))) -> Option AQuick Check:
Filter then map to- nodes = A [OK]
Hint: Filter first, then map to <li> nodes inside h [OK]
Common Mistakes:
- Mapping without filtering includes unwanted items
- Passing booleans or nulls as children
- Passing raw strings array without wrapping in <li>
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
