Reduce re-renders by auto detecting state dependencies #186
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.
By moving data, error, isValidating away from the state (
useReducer
) to a ref (stateRef
), the hook won't trigger another re-render anymore when one of these values updates.Instead, we add getters to these values (implemented with
defineProperties
). Once a value is read, it will be marked as a dependency immediately. Thus, we can trigger a re-render if any dependency changes in the future.With this change,
useSWR
will never cause unnecessary re-renders:No changes needed from the user side (and Suspense mode is not affected).
Fixes #184. Related #144, #114.
Published at
swr@0.1.13-beta.0
swr@0.1.15-beta.0
.This PR has been running on our production for a couple of weeks, and it works very well 🎉