If you're targeting reusable components, then state should be left to the user of your component, or isolated internally via whatever mechanism you like, depending on the component.
That said, some will look better or worse over time, and component libraries will vary. I mean there's Bootstrap, Semantic UI, Material UI and many other UI component libraries. How well a given one fits into the react space, or even your own application will vary. That's the nature of programming.
That said, in 20+ years of developing web applications, React is the first (of very many) web frameworks that felt like the right way to do components. I'm not expecting that it will not eventually be replaced, only that of what I've seen lately, nothing is better enough to replace its' usage... though one might consider another JSX based implementation that's compatible (preact-compat). I also remember many the libraries that were popular before jQuery came about (Prototype, mootools, etc).
If you don't have some form of state management, then you don't have an application... there are some abstractions that may work better than redux, such as the many graphql implementations that have been coming out.
Nice article, I also use the term es7+ to refer to es7 + pending additions... or es7+stage2 etc, since pretty much anything I care about is at least stage 2 now. The latest being async iterables/generators.
I'm thinking of bumping the major on a few of my modules, and not transpiling for npm, just noting that the features are needed and noting that they should run via babel in any client usage...
It's sad that a post like this is needed... I wouldn't consider doing a modern spa/webapp of even medium complexity without a state machine similar to redux or redux itself. In a team setting it allows you to establish workflows that are consistent and easier to understand.
Also, your reducers and action creators don't need to live together, I tend to import from the base directory into feature based structure/directories. A given directory/feature does not need to contain all of actions(creators), reducers, dumb/smart/pf components and sub-components. But by organizing data/handlers into features and components into features, sometimes in the same directory, it makes it easier to find/discover, though it may seem chaotic at first. Imho, it's better than having to traverse through a deep tree to go from a component to a reducer, etc.
I really like redux, and I'm personally inclined to lean on it, even if it makes the code slightly more complex, that complexity is consistent and easier to follow than just about everything else I've seen.
That said, if you have state that doesn't need to be persisted, then go ahead and keep that at a component level. You can have a higher level component with your actions and setstate, then pass them down to more simple components, or pure view functions.
-- crossposted my comment from HN on the same article.