Fix useFeaturesList changing object pointers every rerender #3141
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.
Features and Changes
On Firefox there's been a general error "the operation is insecure" on the main
/features
page for a few weeks now.The reason for this is we have a
useMemo
inservices/search.tsx
which does a shallow replace on the router's query params whenever an object changes. That object in turn is auseMemo
based on the items being searched over, and those items (in the case of/features
) are theFeatureInterface[]
returned byuseFeaturesList
.The problem is that each time the hook is called (due to re-rendering for other reasons) the default empty array that's returned is a new object, so this was causing us to change the query params hundreds of times, which Firefox blocked as a security issue.
Testing
Using Firefox, load http://localhost:3000/features on
main
and on this branch and observe the difference.Optionally, add a console log to the
if (updateSearchQueryOnChange)
clause inservices/search.tsx
to see the frequency at which we callrouter.replace
Screenshots
Before
After