API Reference
Preact.Component
Component
is a base class that you will usually subclass to create stateful Preact components.
Component.render(props, state)
The render()
function is required for all components. It can inspect the props and state of the component, and should return a Preact element or null
.
import { Component } from 'preact';
class MyComponent extends Component {
render(props, state) {
// props === this.props
// state === this.state
return <h1>Hello, {props.name}!</h1>;
}
}
Lifecycle methods
Tip: If you've used HTML5 Custom Elements, this is similar to the
attachedCallback
anddetachedCallback
lifecycle methods.
Preact invokes the following lifecycle methods if they are defined for a Component:
Lifecycle method | When it gets called |
---|---|
componentWillMount |
before the component gets mounted to the DOM |
componentDidMount |
after the component gets mounted to the DOM |
componentWillUnmount |
prior to removal from the DOM |
componentWillReceiveProps |
before new props get accepted |
shouldComponentUpdate |
before render() . Return false to skip render |
componentWillUpdate |
before render() |
componentDidUpdate |
after render() |
All of the lifecycle methods and their parameters are shown in the following example component:
import { Component } from 'preact';
class MyComponent extends Component {
shouldComponentUpdate(nextProps, nextState) {}
componentWillReceiveProps(nextProps, nextState) {
this.props // Previous props
this.state // Previous state
}
componentWillMount() {}
componentWillUpdate(nextProps, nextState) {
this.props // Previous props
this.state // Previous state
}
componentDidMount() {}
componentDidUpdate(prevProps, prevState) {}
componentWillUnmount() {
this.props // Current props
this.state // Current state
}
}
Preact.render()
render(component, containerNode, [replaceNode])
Render a Preact component into the containerNode
DOM node. Returns a reference to the rendered DOM node.
If the optional replaceNode
DOM node is provided and is a child of containerNode
, Preact will update or replace that element using its diffing algorithm. Otherwise, Preact will append the rendered element to containerNode
.
import { render } from 'preact';
// These examples show how render() behaves in a page with the following markup:
// <div id="container">
// <h1>My App</h1>
// </div>
const container = document.getElementById('container');
render(MyComponent, container);
// Append MyComponent to container
//
// <div id="container">
// <h1>My App</h1>
// <MyComponent />
// </div>
const existingNode = container.querySelector('h1');
render(MyComponent, container, existingNode);
// Diff MyComponent against <h1>My App</h1>
//
// <div id="container">
// <MyComponent />
// </div>
Preact.h()
/ Preact.createElement()
h(nodeName, attributes, [...children])
Returns a Preact Virtual DOM element with the given attributes
.
All remaining arguments are collected into a children
Array, and be any of the following:
- Scalar values (string, number, boolean, null, undefined, etc)
- More Virtual DOM elements
- Infinitely nested Arrays of the above
import { h } from 'preact';
h('div', { id: 'foo' }, 'Hello!');
// <div id="foo">Hello!</div>
h('div', { id: 'foo' }, 'Hello', null, ['Preact!']);
// <div id="foo">Hello Preact!</div>
h(
'div',
{ id: 'foo' },
h('span', null, 'Hello!')
);
// <div id="foo"><span>Hello!</span></div>