Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
This PR introduces significant refinements to our state management strategy, aimed at simplifying the use of Recoil states within our application. By streamlining the API, we enhance both the developer experience and the readability of our codebase. The changes include the consolidation of State and ComponentState management, elimination of the StateScopeMap naming, and introduction of a unified approach for handling Recoil states (aka States) and component-specific states. (aka ComponentStates)
Rationale:
The core motivation behind these changes is to make state management more intuitive and maintainable. Developers can now use classical Recoil states (State) for general state management and ComponentStates for states that are internal to reusable components. This approach simplifies the API by reducing it to two main concepts: States (classical Recoil states) and ComponentStates (with a slightly different API).
Both will share the same API: useRecoilState(myState())
For ComponentStates, there will be an additional step: myState = extractState(myComponentState, componentId)
Detailed API
State
Declaration:
Usage:
const recordIndexSorts = useRecoilValue(recordIndexSortsState());
ComponentState
Declaration:
Usage:
How to review
See first commit for POC
The other commits refactor the whole app