GithubHelp home page GithubHelp logo

lets-compare-global-state-with-react-hooks's Introduction

Let's compare global state with React Hooks

Comparing global state libraries with React Hooks

Motivation

I have been developing several libraries for global state with React Hooks. While developing them, I was interested in comparing with existing libraries. It turns out there are various points to compare, showing characteristics of such libraries.

I started creating a comparison table in the issue. As the table becomes bigger, let's create a separate repo so that library authors can contribute improving the comparison.

Comparison points

  1. Does it use React Context? What is context value?
  2. Does it use subscription for state propagation?
  3. Does it have render optimization? What is the technique?
  4. Does it have dependencies? What are they?
  5. What's the level of compatibility with concurrent rendering?
  6. Bundle size (Minified + Gzipped)

Notes

Render optimization means avoiding unnecessary re-renders. If a state object is { a: 1, b: 2 } and a component only uses a, it won't re-render if only b is changed.

For "tearing" and "state branching", refer https://github.com/dai-shi/will-this-react-global-state-work-in-concurrent-mode. These are not necessarily problems depending on requirements.

Comparison Table

1 2 3 4 5 6
react-tracked State-based object Yes Proxy-based tracking and selector function use-context-selector, proxy-compare Level 3 1.9kB
constate State-based object No Multiple contexts No Level 3 508B
unstated-next State-based object No No No Unknown 362B
zustand No Yes Selector function No Level 2 954B
react-sweet-state State-based object Yes Selector function No Unknown 3.6kB
storeon Store Yes Shallow state properties No Unknown 370B
react-hooks-global-state No Yes Shallow state properties No Level 1 1.1kB
react-redux (hooks) Store Yes Selector function Redux Level 2 5.4kB
easy-peasy Store Yes Selector function Redux, immer and so on Unknown 9.6kB
mobx-react-lite Mutable state object No Proxy-based tracking MobX Unknown 2kB
hookstate No Yes Proxy-based tracking No Unknown 4.5kB
recoil Probably rich state-based object Yes with atom abstraction atoms (incl. selectors) No Level 2 21.1kB
react-easy-state(Note: This library does not provide Hooks API) No Yes with observer observer @nx-js/observer-util Unknown 2.9kB
react-tagged-state No Yes Selector function with deps tracking No Unknown 804B
agile-ts No Yes Runtime combining multiple rerender triggers No Unknown 12.7kB
jotai Store Yes, atom-based subscription atoms No Level 1 / (Level 3) 2.6kB
valtio No Yes Proxy-based tracking proxy-compare Level 2 2.5kB

Contribution

If you have questions, suggestions or corrections, please file an issue.

If you have a new library to add, please file a pull request. Please add a new row at the end of the table.

lets-compare-global-state-with-react-hooks's People

Contributors

bennoinbeta avatar dai-shi avatar oleggrishechkin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

lets-compare-global-state-with-react-hooks's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.