A React Hook for Blocking-Free Background Tasks
useWorker
Use web workers with react hook.
? Features
- Run expensive function without blocking UI (Show live gif)
- Supports Promises pattern instead of event-messages
- Size: less than
3KB
! - Clear API using hook
- Typescript support
- Garbage collector web worker instance
- Remote dependencies option
- timeout option
? Install
- @latest
npm install --save @koale/useworker
? Import
import { useWorker, WORKER_STATUS } from "@koale/useworker";
? Usage
import React from "react";
import { useWorker } from "@koale/useworker";
const numbers = [...Array(5000000)].map(e => ~~(Math.random() * 1000000));
const sortNumbers = nums => nums.sort();
const Example = () => {
const [sortWorker] = useWorker(sortNumbers);
const runSort = async () => {
const result = await sortWorker(numbers); // non-blocking UI
console.log("End.");
};
return (
<button type="button" onClick={runSort}>
Run Sort
</button>
);
};
? Examples
More examples: https://github.com/alewin/useWorker/tree/develop/example
? Roadmap
- [x] Kill Web Worker
- [x] Reactive web worker status
- [x] Add timeout option
- [x] import and use remote script inside
useWorker
function - [ ] support Transferable Objects #47
- [ ] import and use local script inside
useWorker
function #37 - [ ] useWorkers Hook #38