picocomponent
v2.1.0
Published
Teeny tiny component system
Downloads
14
Maintainers
Readme
picocomponent
Teeny tiny component system :mag:
Usage
var PicoComponent = require('picocomponent')
function Button () {
PicoComponent.call(this)
this.el = document.createElement('button')
}
Button.prototype = Object.create(PicoComponent.prototype)
Button.prototype.render = function render (text) {
this.el.innerText = text
return this.el
}
var button = new Button()
document.body.appendChild(button.render('Hello world!'))
API
PicoComponent.prototype
PicoComponent
aims to provide a Class like interface for constructing components.
As a consumer you'll always want to extend the PicoComponent.prototype
either via ES6 classes:
class Component extends PicoComponent {
// ...
}
or by extending the base prototype
:
function Component () {
PicoComponent.call(this)
}
Button.prototype = Object.create(PicoComponent.prototype)
Instances of PicoComponent
have the following internal properties:
this.el
: Used to manage the DOM node a component is responsible for. Defaults tonull
. See How do I manage DOM nodes for more info.
PicoComponent.prototype.render(...args)
You'll always want to implement a render function. This forms the public interface for your
component, and will generally leverage some templating library to manage rendering and updating
your component. Your render
method should always return DOM nodes.
PicoComponent.prototype.connect()
When assigned, the connect
handler will be called once your component has been inserted into the DOM.
PicoComponent.prototype.disconnect()
When assigned, the disconnect
handler will be called once your component has been removed
from the DOM.
FAQ
Is this a joke?
It may seem that way, but seriously this exists as a result of other component systems eg.
nanocomponent
being focused on producing components targeted at DOM morphing
libraries such as nanomorph
and morphdom
.
For this reason picocomponent
aims to be more general purpose, leaving DOM diffing strategies up to the consumer,
while still providing useful features such as connect
/disconnect
event listeners by integrating on-load
.
How do I manage DOM nodes
As a matter of convention PicoComponent
implements a custom getter/setter used for managing
the DOM node your component is responsible for.
When assigning a DOM node to your PicoComponent
instance eg:
class Button extends PicoComponent {
constructor () {
super()
this.el = document.createElement('button')
}
}
PicoComponent
will ensure all appropriate lifecycle hooks are correctly assigned.
Have you gone too far?
Eh.
See also:
- joshgillies/hypercomponent
- yoshuawuyts/nanocomponent
- yoshuawuyts/microcomponent
- yoshuawuyts/cache-element
- hypermodules/cache-component
License
MIT