feat: create useDeepCompareCallback #2615
Draft
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.
What's the purpose of this pull request?
Possível fix para a duplicação do evento
view_cart
. Quando tentamos abrir o carrinho o evento é disparado mais de uma vez.O problema parece está nessa linha . Usar objetos e arrays como dependência de useCallback, useEffect, etc pode fazer com o que código seja executado mais de uma vez. Isso porque o React utiliza o método Object.is para fazer comparações dos itens do array de dependência. Podem testar esse caso:
Percebam que são arrays "iguais", porém com referência na memória diferente.
No nosso caso temos o
gifts
eitems
que são arrays. Em algum momento essas estados estão chegando com uma referência diferente, consequentemente disparando a lógica da função novamente.A solução proposta é fazer um
deep compare
no array de dependencias, usandoJSON.stringify
. Essa abordagem é mais robusta, mas pode ser computacionalmente cara dependendo do tamanho dos items que serão comparados.Essa é apenas uma solução para ser discutida e testada, não é um PR final. Alguns ajustes precisam ser feitos no código caso a gente continue nessa abordagem.
How it works?
How to test it?
Starters Deploy Preview
References
Checklist
You may erase this after checking them all 😉
PR Title and Commit Messages
feat
,fix
,chore
,docs
,style
,refactor
,ci
andtest
PR Description
breaking change
,bug
,contributing
,performance
,documentation
..Dependencies
yarn.lock
file when there were changes to the packagesDocumentation
@Mariana-Caetano
to review and update (Or submit a doc request)