refactor: replace use-subscription #6246
Closed
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.
Description
Closes # (NO_ISSUE)
Type of change
Checklist
console.log
sIf this PR depends on external APIs:
chrome-extension://[id]
moz-extension://[id]
Back in 2019, React released the first version of
use-subscription
(facebook/react#15022). At the time, we only have very limited information about concurrent rendering.In 2020, React provides a first-party official API
useMutableSource
(reactjs/rfcs#147, facebook/react#18000):React 18 introduces
useMutableSource
's replacementuseSyncExternalStore
(see details here: reactwg/react-18#86), and React changesuse-subscription
implementation to useuseSyncExternalStore
directly: facebook/react#24289And according to
use-subscription
:The PR does exactly that:
use-subscription
use-sync-external-store
to the dependencies.use-sync-external-store
package enables compatibility with React 16 and React 17.useSubscription
usage withuseSyncExternalStoreWithSelector
useSyncExternalStore
shim,useSyncExternalStoreWithSelector
provides the built-in memo support to prevent infinite loop rendering.