Skip to content
React custom hooks for web workers
JavaScript
Branch: master
Clone or download
Latest commit 09e04d6 Sep 12, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
__tests__ rename worker files Aug 18, 2019
dist createWorker factory instead of worker instance Aug 11, 2019
examples rename worker files Aug 18, 2019
src fix warning by tsc in js Sep 8, 2019
.eslintrc.json minor change in eslintrc Sep 12, 2019
.gitignore inital commit Jan 27, 2019
.travis.yml inital commit Jan 27, 2019
CHANGELOG.md new worker-base api Aug 11, 2019
LICENSE inital commit Jan 27, 2019
README.md add blog item Sep 8, 2019
package-lock.json update deps Sep 8, 2019
package.json update deps Sep 8, 2019
tsconfig.json enable source-map and so on Sep 10, 2019
webpack.config.js enable source-map and so on Sep 10, 2019

README.md

react-hooks-worker

Build Status npm version bundle size

React custom hooks for web workers.

Introduction

Web Workers are another thread from the main thread in browsers. We can run heavy computation in a separate thread so that users don't feel slowing down.

React provides a reactive system. This library hides the async nature of Web Workers with React custom hooks. Results returned by Web Workers are stored in a React local state.

Developers can implement a worker as:

  • sync function
  • async function
  • sync generator function
  • async generator function

Install

npm install react-hooks-worker

Usage

slow_fib.worker.js:

import { exposeWorker } from 'react-hooks-worker';

const fib = i => (i <= 1 ? i : fib(i - 1) + fib(i - 2));

exposeWorker(fib);

app.js:

import React from 'react';

import { useWorker } from 'react-hooks-worker';

const createWorker = () => new Worker('./slow_fib.worker', { type: 'module' });

const CalcFib = ({ count }) => {
  const { result, error } = useWorker(createWorker, count);
  if (error) return <div>Error: {error}</div>;
  return <div>Result: {result}</div>;
};

const App = () => (
  <div>
    <CalcFib count={5} />
  </div>
);

Bundler support requirements

This library requires a bundler to recognize Web Worker properly. Not everything is tested, and we appreciate for your help. (So far, only tested with worker-plugin.)

Webpack

Parcel

Parcel allow your Web Worker script to be automatically bundled.

Rollup

Examples

The examples folder contains working examples. You can run one of them with

PORT=8080 npm run examples:minimal

and open http://localhost:8080 in your web browser.

Blogs

You can’t perform that action at this time.