Mitt
Tiny 200b functional event emitter / pubsub.
- Microscopic: weighs less than 200 bytes gzipped
- Useful: a wildcard
"*" event type listens to all events
- Familiar: same names & ideas as Node's EventEmitter
- Functional: methods don't rely on
this
- Great Name: somehow mitt wasn't taken
Mitt was made for the browser, but works in any JavaScript runtime. It has no dependencies and supports IE9+.
Table of Contents
Install
This project uses node and npm. Go check them out if you don't have them locally installed.
$ npm install --save mitt
Then with a module bundler like rollup or webpack, use as you would anything else:
import mitt from 'mitt'
var mitt = require('mitt')
The UMD build is also available on unpkg:
<script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script>
You can find the library on window.mitt.
Usage
import mitt from 'mitt'
const emitter = mitt()
emitter.on('foo', e => console.log('foo', e) )
emitter.on('*', (type, e) => console.log(type, e) )
emitter.emit('foo', { a: 'b' })
emitter.all.clear()
function onFoo() {}
emitter.on('foo', onFoo)
emitter.off('foo', onFoo)
Typescript
Set "strict": true in your tsconfig.json to get improved type inference for mitt instance methods.
import mitt from 'mitt';
type Events = {
foo: string;
bar?: number;
};
const emitter = mitt<Events>();
emitter.on('foo', (e) => {});
emitter.emit('foo', 42);
Alternatively, you can use the provided Emitter type:
import mitt, { Emitter } from 'mitt';
type Events = {
foo: string;
bar?: number;
};
const emitter: Emitter<Events> = mitt<Events>();
Examples & Demos
Preact + Mitt Codepen Demo