1.1.6 • Published 10 months ago
miis v1.1.6
miis
The
miisis a tiny functional event subscriber and dispatcher.
Features
- Tiny: weighs less than 1kb gzipped
- Plentiful: a special "*" event type listens to all events
- Scope: isolate different listening environments by setting scope
Install
This project need node and npm.
npm install miis --saveor
pnpm add miis --saveUseage
import miis from "miis";
miis.subscribe("a", (...args) => {
console.log("a event call"); // a event call
console.log(...args); /// 1, 2, 3
});
miis.dispatch("a", 1, 2, 3);And it's so easy to operate with react. Here is a demo.
import * as React from "react";
import "./style.css";
import miis from "miis";
export default function App() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
return miis.subscribe("a", () => {
setCount(count + 1);
});
}, [count]);
const handleClick = () => {
miis.dispatch("a");
};
return (
<div>
<button onClick={handleClick}>Dispatch A</button>
<p>Count: {count}</p>
</div>
);
}You could unsubscribe the event lisenter with the result of subscribe.
import miis from "miis";
const unsubscribe = miis.subscribe("a", () => {
console.log("a event call");
});
unsubscribe();
miis.dispatch("a"); // not workAPI
subscirbe
Register an event listenter for the given name.
Params
eventNamestring | symbol Name of event to listen for.(*for all events)listenterFunction Function to call in response to given eventoptionsundefined | Object Some options. optionalonceboolean Only call once if it istrue.
Returns
unsubscribeFunction Function to remove the listenter.
dispatch
Invoke all handlers for the given name.
Params
eventNamestring | symbol Name of event to invoke for.
clear
Clears the specified listeners. It will clear all listeners if the parameter is undefined.
Params
eventNamestring | symbol | undefiend Name of event to listen for.(undefined for all events)
setScope
If you call dispatch, only the handlers for the given scope will be invoked.
Params
scopestring Name of scope.
getScope
Return current scope.
resetScope
Reset the scope to be default.