Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 23, 2020. It is now read-only.

acacode/reffect

Repository files navigation

reffect logo
npm npm bundle size license

Reffect — is a declarative and reactive multi-store state manager for JavaScript/TypeScript applications inspired by Reatom and Effector

Packages

Install

Before at all you need to install the main package:

$ npm i -S @reffect/core
# or using yarn
$ yarn install @reffect/core

If a project is using React you need to install @reffect/react (pack of React hooks which simplify usage with React application)

$ npm i -S @reffect/react

Examples

Simple counter

import { store, effect, manage } from "@reffect/core";
const counter = store({ value: 0 });
const plus = effect(counter, (num: number) => ({ value: counter.value + num }));
const plus10 = effect(counter, () => plus(10));
const unsubscribe = manage(counter).subscribe((update, prevState, currState) =>
 console.log(update, prevState, currState),
);
plus(10);
plus10();
console.log(counter.value); // 20

Async effects

import { store, effect, manage } from "@reffect/core";
import { logger } from "@reffect/logger";
export const usersStore = store("users-store", { list: [] }, [logger]);
export const getUsers = effect(usersStore, async () => {
 const allUsers = await api.getAllUsers();
 return {
 list: allUsers,
 };
});
getUsers(); // Promise<void>

React usage

import React from "react";
import { usersStore, getUsers } from "./above-example.ts";
import { useStore, useEffectState } from "@reffect/react";
export const UsersList = () => {
 const users = useStore(usersStore);
 const { loading, done, error } = useEffectState(getUsers);
 return (
 <ul>
 {!loading && done && users.list.map(user => <li>{user.name}</li>)}
 {loading && "Loading..."}
 {error && "Error!"}
 </ul>
 );
};

How it works

Data flow diagram

About

The state manager

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /