React I Love You, but You're Bringing Me Down

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • Svelte

    Cybernetically enhanced web apps

    Mithril or Svelte should be all you need. If you're coming from React, I'd recommend trying Mithril first. I've been using it heavily for 5 years now and I'll likely stick with it for at least another 15. It smokes React in every category, but still has an optional JSX integration if that's what you're comfortable with.

    https://mithril.js.org/

    https://svelte.dev/

  • CPython

    The Python programming language

    > hooks need to be named "useX"

    This is just dynamic dispatch dispatch based on the name. Here's an example in Python that does it for methods that start with "do_"

    https://github.com/python/cpython/blob/96739bccf220689a54ef3...

    > have restrictions on where to be called

    This is because hooks are just next() calls on an iterator. Is it magic and entirely because the devs thought it was more beautiful than having to pass a key like state = useState("state", 0)? Absolutely. Does it transcend JS, no.

       hooks = [1, 2, 3, 4]

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

  • SvelteKit

    web development, streamlined (by sveltejs)

    I was using React earlier for many years, but nowadays Svelte and SvelteKit (file based routing). I feel I am more productive (might be an illusion), but at least I am less frustrated.

    More here:

    https://kit.svelte.dev/

  • modern-todomvc-vanillajs

    TodoMVC with Modern (ES6+), Vanilla JavaScript

    > React takes us forward in the sense that most of us don't want to go back to direct DOM manipulation

    There was recently a demo of what a Todo MVC app might look like if written in vanilla JS with today's apis. It looks fairly decent; I could see myself going back to something like that:

    https://frontendmasters.com/blog/vanilla-javascript-todomvc/

  • mantine

    A fully featured React components library

    Using an opinionated library can help with some of these issues. Personally, I love https://mantine.dev.

  • RxJS

    A reactive programming library for JavaScript

    React is low level. Svelte and Solid are low level too.

    You are dealing with particular values and wiring everything meticulously.

    Whenever I write stuff using https://rxjs.dev, writing React feels the same.

    Using ExtJS years ago felt higher level than React.

  • React

    The library for web and native user interfaces.

    Concurrent react actually makes your app less concurrent: https://github.com/facebook/react/issues/21668

    5yrs in progress, it’s still not documented let alone fixed. I tried to look at the code, and they make giant PRs and are experimenting with priority queues and bitmasks, which seemed pretty off in the weeds to me.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

  • Mithril.js

    A JavaScript Framework for Building Brilliant Applications

    Mithril or Svelte should be all you need. If you're coming from React, I'd recommend trying Mithril first. I've been using it heavily for 5 years now and I'll likely stick with it for at least another 15. It smokes React in every category, but still has an optional JSX integration if that's what you're comfortable with.

    https://mithril.js.org/

    https://svelte.dev/

  • react-redux-realworld-example-app

    Exemplary real world application built with React + Redux (by khaledosman)

    Yeah unfortunately the author hasn't kept making these articles.

    You can see the React+Redux implementation here:

    https://github.com/khaledosman/react-redux-realworld-example...

  • Yeah unfortunately the author hasn't kept making these articles.

    You can see the React+Redux implementation here:

    https://github.com/khaledosman/react-redux-realworld-example...

  • react-18

    Workgroup for React 18 release.

    > it also only bales out during the DOM update phase; not during the calls to render() and then reconciliation(?)

    It's exactly the opposite.

    React splits work into two parts: the "render phase", where it loops over components and asks them to describe the UI they want (returning JSX/elements); and the "commit phase", where it has determined the changes that _need_ to happen to the DOM.

    The render phase is the part that can be split into many pieces. React can render a few components, see that 5ms has elapsed, and yield to the browser, then pick up where it left off and render a few more components. Or, it could render some components, pause, see a high-priority user event happen like typing into an input, and set aside the partially completed render pass to go re-render based on the input update. Then, after the input render is done, it can pick up where it left off with the other partial render, "rebase" it onto the current UI contents, and continue from there.

    The commit phase is _always_ synchronous, start to end, and that's where the actual DOM updates are applied.

    Some more details:

    - https://blog.isquaredsoftware.com/2020/05/blogged-answers-a-...

    - https://github.com/reactwg/react-18/discussions/55

    - https://reactjs.org/blog/2022/03/29/react-v18.html#what-is-c...

  • lit

    Lit is a simple library for building fast, lightweight web components.

  • Quasar Framework

    Quasar Framework - Build high-performance VueJS user interfaces in record time

    > From what I recall, quasar managed to update very quickly.

    This is true, at least there now is Vue 3 support, just checked: https://quasar.dev/

    Though I can't edit the original post anymore. Oh well, thanks for clearing that up.

  • mam_mol

    $mol - fastest reactive micro-modular compact flexible lazy ui web framework.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts