---
title: Deku v1
category: JavaScript libraries
---
```js
/** @jsx element */
import element from 'virtual-element' // replacement for React.createElement
import {render, tree} from 'deku'
var app =
Hello World!
render(tree(app), document.body)
```
## Components
```js
Button = {
render () { return Submit }
}
App = {
render () { return
}
}
render(tree( ), document.body)
render(tree(element(App)), document.body)
```
## Component props/state
```js
App = {
render ({ props, state }) {
return { /*...use state.store here*/ }
}
initialState (props) {
return { store: store.getState() }
},
afterMount (comp, el, setState) {
store.subscribe(() => setState({ store: store.getState() }))
}
}
render(tree( ), document.body)
```
## Events
```js
{props.text}
```
## Magic virtual element
Use [magic-virtual-element](https://github.com/dekujs/magic-virtual-element) to enable nice classnames.
```
import element from 'magic-virtual-element'
```
## Reference
```
name = 'MyComponent'
// Defaults
initialState (props) {...} // return initial state
defaultProps = { hi: 'hello' }
// Render
render ({props, state}, setState) {...}
// Lifecycle
beforeUpdate ({props, state, id}, nextProps, nextState) {}
afterRender ({props, state, id}, el) {}
afterUpdate ({props, state, id}, prevProps, prevState, setState) {}
afterMount ({props, state, id}, el, setState) {}
beforeUnmount ({props, state, id}, el) {}
```
See: