# preact-cycle
**Repository Path**: mirrors_developit/preact-cycle
## Basic Information
- **Project Name**: preact-cycle
- **Description**: :recycle: Minimal functional Virtual DOM rendering using Preact :bike:
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-08
- **Last Updated**: 2026-08-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# preact-cycle
[](https://www.npmjs.com/package/preact-cycle)
[](https://travis-ci.org/developit/preact-cycle)
> Minimal functional _(-reactive)_ Virtual DOM rendering using [Preact].
---
### Simple Example
[**View this example on esnextb.in**](http://esnextb.in/?gist=d804796c481218488309)
```js
import { render, h } from 'preact-cycle';
/** @jsx h */
const App = ({ value, mutation }) => (
Value: { value }
);
render(App, { value: 0 });
```
---
### To-Do List Example
A simple example, where reducers are just pure functions.
Note that `TOGGLE` mutates state in-place, which works fine but is discouraged.
[**View this example on CodePen**](https://codepen.io/developit/pen/XYvQjr?editors=0110)
```js
import { render, h } from 'preact-cycle';
/** @jsx h */
const ADD = ({ text, todos, ...state }) => ({
todos: todos.concat({ text }),
text: '',
...state
});
const TOGGLE = (state, todo) => {
todo.done = !todo.done;
return state;
};
const REMOVE = ({ todos, ...state }, todo) => ({
todos: todos.filter( t => t!==todo ),
...state
});
const TodoList = ({ text, todos, mutate, mutation }) => (
);
render(TodoList, { todos: [] }, document.body);
```
---
### Component-Based Example
Normal [preact] components still work great with preact-cycle. As of `v0.4`, `mutate()` and `mutation()` are conveniently available as [context] properties, which means they are automatically passed down through the VDOM tree. For pure functional components, [context] is simply passed as a second argument.
A component-based variant of the previous To-Do List example follows, using pure functions and context.
```js
import { h, render } from 'preact-cycle';
/** @jsx h */
/** initial data to populate the store */
const INITIAL_DATA = {
todos: [
{ text:'Type some text' },
{ text:'...then hit [enter]' },
{ text:'Now you\'re productive!' }
]
};
/** Appends a new todo item */
const ADD = ({ todos, text, ...state }) => ({
todos: todos.concat({ text }),
text: '',
...state
});
/** Remove the given todo item */
const REMOVE = ({ todos, ...state }, todo) => ({
todos: todos.filter(t => t!==todo),
...state
});
/** Toggles the given todo item as done */
const TOGGLE = (state, todo) => {
todo.done = !todo.done;
};
/** a simple helper to derive a mutated value from an event */
let fromEvent = (prev, e) => e.target.value;
/** The todo list app */
const App = ({ text, todos }) => (
{ todos.map( todo => (
)) }
);
/** New todo entry form */
const Form = ({ text }, { mutation }) => (
);
/** A single todo list item */
const Item = ({ todo }, { mutation }) => (