mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
When you pass an unmemoized selector to useSyncExternalStoreExtra, we have to reevaluate it on every render because we don't know whether it depends on new props. However, after reevalutating it, we should still compare the result to the previous selection with `isEqual` and reuse the old one if it hasn't changed. Originally I did not implement this, because if the selector changes due to new props or state, the component is going to have to re-render anyway. However, it's still useful to return a memoized selection when possible, because it may be the input to a downstream memoization. In the test I wrote, the example I chose is selecting a list of items from the store, and passing the list as a prop to a memoized component. If the list prop is memoized, we can bail out.
use-sync-external-store
Backwards compatible shim for React's useSyncExternalStore. Works with any React that supports hooks.
Until useSyncExternalStore is documented, refer to https://github.com/reactwg/react-18/discussions/86