Hi Patricia,
just stumbled upon your well written article, since I implemented a state management solution for the neo.mjs framework.
After looking at the context api docs (was not aware of this one), I found a couple of similarities and i think it can get done smarter.
The main problem is the same: how to make data properties accessible inside a component tree without passing them manually downwards.
In neo, components can now optionally have view models where you can store data. Each component has full access to the view model data of the parent component tree (it will always find the closest match for each data property). data properties can be nested, you can get() and set() them using view controllers as well.
The main difference is that you can bind your model data properties to component configs (similar to class fields). you can use binding formatters (template literals) to modify the value the component receives. configs are in charge on manipulating the virtual dom.
The result is that you can change your state (data properties) inside a parent model any way you want. only "real" value changes will even get to a bound component config and a re-rendering (check for delta updates) will only happen in case it is needed. The performance is blazing fast, but this is also related to components and models living inside a web worker.
In case your scope is not limited to React only, I can share friend links for 2 blog posts I just finished.
Would love to get your input :)
Best regards,
Tobias