I have used redux in a medium sized app.
The advantage is that there are lots of documentation. Developper can lean on those resources and the result is an architecture that is shared easily among multiple teams.
The disadvantage is that handling asynchronous effects is unclear. Also sometimes adding a flag to manage some subcomponent state require a lot of work. It also clutters your centralized state. It can also be a pain to manage forms this way. And by that I mean managing the state of a form that is in the process of being filled.
Currently my favorite way of designing js apps is a mixed approach. Put all your business code in model classes. Only centralize the state that is important to your application. Sprinkle local states when appropriate. Use hooks & context to inject your model classes in the right components.
> The disadvantage is that handling asynchronous effects is unclear.
To be honest to me this is one of the areas where redux really shines. I've had great success with both redux-saga and redux-observable
(I'm not saying the above would be better than what we have, just that it seems like it should be properly explored)