News for hackers. Stuff that matters.
Re:Show HN: SimpleR State – simple state management for React by franciscop on Monday March 22, 2021 @07:50AM (#26539534)
How do you define "simple"? Simple is a very complex topic :)

For example, in React the common way of using hooks is `useMyhook()` where "Myhook" is whatever you name it, like "useState", "useEffect", etc.

So I'd argue that an API that follows the conventions in a platform is simpler than one that rewrites them. In this specific situation in the first demo, I would expect to have a hook called `useCounter()` instead of `counter.use()`.

Furthermore, since we are manipulating state again the convention in React for state manipulation is to return the value and then the setter, like:

    const [counter, setCounter] = useCounter();
Now I understand since it's a global state we cannot give it a local initial value to avoid race conditions, so that's IMHO about as simple as you can get.

I didn't do that, but I believe I got pretty close with my own React state management library https://statux.dev/:

  const [counter, setCounter] = useStore("counter");
Re:Show HN: SimpleR State – simple state management for React by aenero on Monday March 22, 2021 @08:53AM (#26540107)
Following React conventions is certainly an option and is supported by SimpleR State's unopinionated and flexible syntax.

1. It was inadvertently removed from the documentation, but these are equivalent:

   const count = counter.use()

   const count = useEntity(counter)
but the `counter.use()` was chosen in the documentation due to more feedback that requested this "simpler" format (i.e. no need to import `useEntity()`. But again, to your point I will restore the mention of `useEntity` in the documentation.

2. As for the [state, setState] convention, think of useEntity more like useContext than useState. Then it gets simpler.

3. I would also argue that since this is "shared" state, the developer might (again, the library is not opinionated on this) choose to separate the logic of updating shared state. For this reason, I didn't see any reason to provide a setter through the hook, when you can access the setter from anywhere via something like counter.set(). Conforming to useState convention was not justified in this case, especially since useContext convention equally makes sense for shared state.

4. To suit whatever convention, you can always do something like this alongside the definition of the entity:

   export const useCounter = counter.use

I want to point out that SimpleR State provides the flexible constructs to allow the developer to tailor it to their preferred convention.

Thanks for your feedback.

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Monday March 22, 2021 @09:12AM (#26540297)
Hey, I like your version too. I’m digging these simple state libraries. Really proves just how absurd Redux was when you finally see the simple solution.
Re:Show HN: SimpleR State – simple state management for React by qudat on Monday March 22, 2021 @11:38AM (#26542349)
Simple state libraries are great for simple web apps, not for massive, enterprise-level applications. As someone who regularly investigates alternatives to redux, it still sits at the top of state management.

These intro how-to comparisons don’t do redux justice because being simple to use is not the stated goal of redux. Large scale, maintainable, and traceable code is the primary goal of redux. When you allow anything to update your state with zero form of traceability, you’ll start to see the cracks in these simple designs.

Are these new state management libraries easy to use? Sure, but what happens when you have tens of thousands (even hundreds of thousands) of lines of code to deal with and then add major refactoring objectives in the pipeline?

Like others have mentioned, if you are using redux for a simple to-do app, then its design principles are probably not as valuable.

It’s like thinking about time complexity for algorithms, at a small enough N, even slow algorithms can compete, but as you increase N, some algorithms become untenable.

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Monday March 22, 2021 @01:42PM (#26544018)
You are not the only one debugging large apps. How does the wider world of programming debug stuff without actions and reducers?

It’s crazy how the Redux people either always appeal to authority (‘my app is bigger than yours’) or can’t say anything more than ‘I just like it’.

And to play the rhetorical game, what happens when you have hundreds of thousands of lines of insane Redux code where you have lost all sense of the state tree and need to mentally cordon off one single piece of it to not go insane? Kind of like how libraries like this are already doing it.

So here is my challenge to you. Spec out an app that you believe can only be solved with Redux at scale (or rather, highlight the areas of the app that absolutely benefit from Redux, but please provide as detailed a spec as you can if you have the time, or care for that matter). I’d love to hear about this incredible web app.

Re:Show HN: SimpleR State – simple state management for React by qudat on Thursday March 25, 2021 @09:51AM (#26580253)
The reason is because the problems that surface at scale are difficult to illustrate in a comparison blog, which is the foundation for all the rants against redux.

Redux is not complex, contrary to popular belief. The core code can be written in 100 LoC.

The real downside to redux is not the boilerplate that is required to set it up or the number of concepts to learn, instead it’s how easy it is to do it incorrectly. The redux maintainers have spent the last few years not making changes to the core library, but figuring out conventions and helper libraries to make it more clear what you should (eg normalize state) and should not (put every piece of state) in your redux store.

No offense but the spec exercise seems like a waste of both of our time. No amount of talking about an app can illustrate the code organization at scale.

Re:Show HN: SimpleR State – simple state management for React by franciscop on Monday March 22, 2021 @09:25AM (#26540438)
I believe Redux is good when you have 3+ people working on the same project front-end, and absolutely necessary when you have 10+. This makes it work great with the Facebook, Airbnb, etc. of the world.

Which is totally fine, but not your everyday problem for the rest of us! I'm very happy to see all of these versions pop up as well.

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Monday March 22, 2021 @09:48AM (#26540723)
What makes that objectively true? I’m looking at these APIs, and at least two of these solutions are plain better design.

What about this would get worse with more engineers or higher caliber engineers that Redux clearly avoids?

Re:Show HN: SimpleR State – simple state management for React by franciscop on Monday March 22, 2021 @10:07AM (#26540957)
It formalizes how data is created, accessed and modified. Instead of multiple places trying to modify some specific data ad-hoc and with possible collisions/changes, now you have a mores strict way of dealing with data.

Basically the Flux architecture. See from 10:20:

https://www.youtube.com/watch?v=nYkdrAPrdcw

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Monday March 22, 2021 @10:35AM (#26541398)
Ok, so what are the actions/reducers nonsense about?

I’m just not seeing the argument here, and I’ve been on multiple redux applications on teams of various sizes. We always seem to create layers of indirection to do the simplest possible state update.

We adopted Dan Abramov’s mental model, and my god, it was a labyrinth.

Re:Show HN: SimpleR State – simple state management for React by acemarke on Monday March 22, 2021 @11:45AM (#26542438)
You might want to read my "Tao of Redux" posts and Dan's "You Might Not Need Redux" post, which explain why Redux was designed the way it is:

- https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-ta...

- https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-ta...

- https://medium.com/@dan_abramov/you-might-not-need-redux-be4...

Ultimately, it's about putting a deliberate separation between "what happened" in the UI and "how the state is updated", writing as much of your state update logic as pure functions, and being able to use that indirection to enable tracing state updates over time via the DevTools.

Also note that our official Redux Toolkit package is now the standard recommended way to write Redux logic, and it simplifies most of the Redux code you'll write:

https://redux.js.org/tutorials/fundamentals/part-8-modern-re...

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Monday March 22, 2021 @07:11PM (#26548713)
I think you guys should take a more honest retrospective on an age old topic of ‘Intent versus Impact”.

The truth of the story was that community was desperately looking for a solution to global state to avoid prop drilling. No amount of technical virtuosity, or cop outs to a half assed flux architecture that fundamentally mimics model-view-controller or a pub/sub pattern will be satisfiable to anyone with critical thinking ability.

The kids had one job, get some global state available to the app, and they managed in their bravado to pack in ‘addons’, or in sales terms, they ‘up-sold’, that $40 hdmi cable along with your new $1600 television.

Dan packaged his extra bullshit (the reducer pattern) over to a desperate group that had nowhere else to turn for a global state solution. Celebrity and hero worship was one of the premier sins in all of this. The guy didn’t know what the fuck he was doing and no one called him out on it.

Certainly we are not going to marvel at the fact that he is a React core developer. Bad ideas are bad ideas, regardless of the current class that ordains it.

For this, I am depressed, and will continuously antagonize the Redux team for the damage they caused the entire community.

The Redux team owes a debt. Rewrite your library so that the api is 5 lines at max. Replace your conceptions, seek forgiveness for the sin, and let it rest. Until then, don’t peddle your Frankestein ever again anywhere, you all had plenty of time in the limelight and quite frankly - you weren’t good enough.

Like what is the redux-toolkit? Do you guys lack the conviction to decide what the api is or isn’t?

With all that said, if you don’t understand what I’m saying, then mapDispatchToProps or mapsTateToFuckYou, connect everything to nonsense, and I suppose in your new bullshit, createSlice to shut up already. You guys can’t write an api if your life depends on it. And I swear to god, if I hear about the stupid Ducks pattern ... I just can’t anymore.

Anyways, I’d prefer never to punch down if I can avoid it. The redux/abramov/constituents of the react community became the Zeitgeist of the Javacript community. Paragons. And no one stood up to them and behind the bullshit is a clusterfuck of shitty apps. You guys ain’t a small agenda, and I expect the fight to continue.

Re:Show HN: SimpleR State – simple state management for React by acemarke on Tuesday March 23, 2021 @01:00AM (#26551300)
I'm genuinely sorry that you're angry enough to rant like this. You might want to look into some therapy or something - that kind of anger can't be healthy.

In the meantime, we're going to keep working to support our users. Who, based on the vast amount of feedback we've gotten over the last couple years, _are_ happy with the directions we're going.

Re:Show HN: SimpleR State – simple state management for React by runawaybottle on Tuesday March 23, 2021 @08:29AM (#26554227)
If that’s the closest thing I’ll get to a sorry for Redux existing, I’ll take it.
Re:Show HN: SimpleR State – simple state management for React by aenero on Monday March 22, 2021 @10:34AM (#26541378)
I see what you're saying here, and actually agree at some level.

But there is always an alternative, IMHO. If the project has a good code structure and follow equally good coding standards and review process, using simple un-opinionated/flexible libraries would not be a liability with "scale" (in terms of team/project size).

And there's one advantage of simpler approaches for growing teams: faster/easier onboarding. Let's face it, even good React/Redux developers can understand simpler code faster.

Just an alternative thought. But I completely get your point.