14.0.0 • Published 2 years ago

batis v14.0.0

Weekly downloads
33
License
MIT
Repository
github
Last release
2 years ago

batis

General reactive JavaScript programming using the idea of React Hooks.

Introduction

Even though React Hooks are actually a constrained solution for using state and managing side effects in functional stateless components, they have proven to be very elegant in their design. I wanted to use this kind of reactive programming in areas other than React development, so I wrote Batis.

Batis essentially revolves around the concept of a Hook and its host. Running a functional stateless Hook requires a host that manages the state and effects and reports asynchronous state changes that should result in a new run.

Installation

npm install batis

Usage

import {Host, useEffect, useLayoutEffect, useMemo, useState} from 'batis';
function useGreeting(salutation) {
  const [name, setName] = useState(`John`);

  useLayoutEffect(() => {
    setName(`Jane`);
  }, []);

  useEffect(() => {
    // Unlike React, Batis always applies all state changes, whether
    // synchronous or asynchronous, in batches. Therefore, Janie is not
    // greeted individually.
    setName(`Janie`);
    setName((prevName) => `${prevName} and Johnny`);

    const handle = setTimeout(() => setName(`World`), 0);

    return () => clearTimeout(handle);
  }, []);

  return useMemo(() => `${salutation} ${name}!`, [salutation, name]);
}
const greeting = new Host(useGreeting);

console.log(greeting.run(`Hi`));
console.log(greeting.rerun());

greeting.reset();

console.log(greeting.run(`Bye`));
console.log(greeting.rerun());

await greeting.nextAsyncStateChange;

console.log(greeting.run(`Hello`));
[ 'Hi Jane!', 'Hi John!' ]
[ 'Hi Janie and Johnny!' ]
[ 'Bye Jane!', 'Bye John!' ]
[ 'Bye Janie and Johnny!' ]
[ 'Hello World!' ]

API reference

The React Hooks API reference also applies to this library and should be consulted.

Implementation status

Below you can see the subset of React Hooks implemented by Batis:

React HookStatus
useState✅Implemented
useEffect✅Implemented
useLayoutEffect✅Implemented
useMemo✅Implemented
useCallback✅Implemented
useRef✅Implemented
useReducer✅Implemented
useContext❌Not implemented
useImperativeHandle❌Not implemented
useDebugValue❌Not implemented
14.0.0

2 years ago

13.0.2

4 years ago

13.0.1

4 years ago

13.0.0

4 years ago

12.1.0

4 years ago

12.0.1

4 years ago

12.0.0

4 years ago

10.0.0

4 years ago

11.0.0

4 years ago

9.1.0

4 years ago

9.0.0

4 years ago

8.1.0

4 years ago

8.0.1

4 years ago

8.2.0

4 years ago

8.0.2

4 years ago

8.0.0

4 years ago

7.2.0

4 years ago

7.0.0

4 years ago

7.1.0

4 years ago

6.2.0

4 years ago

5.0.0

5 years ago

6.1.0

4 years ago

6.0.0

4 years ago

4.0.0

5 years ago

3.0.0

5 years ago

2.0.0

5 years ago

1.0.0

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago