-
Notifications
You must be signed in to change notification settings - Fork 371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(use-user): cache user state to localStorage
#443
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Conditional Fetching... 🤯 Mas que implementação delicinha! 😍 Muito mais elegante que a minha!
E, se eu não perdi nada, a única coisa que a minha faz a mais é não pedir um novo login para os usuários com sessão ativa que ainda não tenham o user
salvo no storage
.
Proposital, imagino, pois seria só um detalhezinho a mais para implementar. Se não foi proposital, eu posso sugerir algo... 🚀
8775d13
to
29fbcd1
Compare
Show!!! Gosto de usar o
Total!!! Inclusive, fiz um push agora que toma nota do E sobre o Em paralelo o teste falhou, mas foi no |
Opa, amanhã devo conseguir arrumar um tempo para ver isso... Talvez consiga fazer algo parecido com o |
Show! Mas acho que o |
@aprendendofelipe eu tava pensando aqui: e se a gente já fizer deploy desse PR para já ir populando o localStorage da turma e daí ir iterando as lapidações em outros PRs? Então fora o que a gente conversou do |
Oi @filipedeschamps, ainda não tive tempo de mexer com isso, mas ontem, esperando o sono vir, me surgiu na cabeça algumas questões que precisaria testar para confirmar. Acho que na implementação desse PR #443 está sendo lido o Por exemplo, uma página de um conteúdo com 20 respostas irá ler a mesma informação do No PR #440 o retorno é memoizado e o estado é único para todos os componentes que utilizam o Se não se importar com as diversas leituras do const handleSubmit = useCallback(
async (event) => {
event.preventDefault();
if (!user.username) {
router.push('/login');
return;
Acho o |
Seria ainda mais útil nesse caso, mas também dá pra usar ele pra forçar um novo |
Outra coisa que pensei aqui, e que daria problema nas duas implementações diferentes (na sua, só na fase 2), é que alguma configuração de privacidade que impeça a gravação em |
Ahh interessantíssimo! Você acha que é possível então misturar as duas estratégias dos dois PRs?
Mas aí que tá, nós temos duas garantias:
Ahhh que delicinha!!! Perfeito 👍
De fato, mas prefiro ver dar problema para ser sincero, pois nesse tipo de preocupação pode-se envolver também os cookies (ou até JavaScript). Então faço a sugestão de novo de você fazer takeover nessa branch e decidir quando achar que está pronta para deploy (ou se devemos abandoná-la) 🤝 com isso, consigo paralelizar e trabalhar na issue de auditoria da milestone 4 👍 |
@filipedeschamps deixa comigo! 🤝
|
|
@aprendendofelipe is attempting to deploy a commit to the TabNews Team on Vercel. To accomplish this, @aprendendofelipe needs to request access to the Team. Afterwards, an owner of the Team is required to accept their membership request. If you're already a member of the respective Vercel Team, make sure that your Personal Vercel Account is connected to your GitHub account. |
Parte 1 - ok 😉 |
Massa! Isso significa que podemos fazer o deploy, correto? |
2cddf81
to
3fc92f3
Compare
Fiz uma bateria de testes aqui para lhe responder e percebi que, quando o usuário não estava logado, o O que acontece agora é que o Por hora setei o Tirando o erro maluco das dependências, pode mandar pra deploy 🚀 |
Interessantíssimo, de fato ele vai fazer isso por padrão. Na primeira implementação que fiz, eu não dava E não vejo problema com a flag que você colocou. Em situações assim eu gosto do caminho feliz ser de uma forma, e o caminho não feliz ser o caminho do throw. Pelo menos o backend TabNews inteiro foi arquitetado assim (vamo ve se vai se sustentar 😂 ). Bom, estou fazendo merge numa branch intermediária pra forçar o deploy em homologação 👍 |
É @filipedeschamps , pesquisei bastante e até analisei o código do |
Show meu caro, obrigado por ficar em cima disso 🤝 |
Este PR faz par com o PR #440 do @aprendendofelipe e a tentativa aqui foi fazer a mesma coisa proposta por ele, mas usando o
swr
. Não trouxe para cá todas as implementações do PR dele, queria apenas rabiscar algo para ele ver.Então as características são:
loginStatus
como"loading"
e que pode resolver para"logged-in"
ou"logged-out"
."logged-out"
aparece o menu deLogin / Cadastrar
."logged-in"
aparece o dropdown menu com ousername
.user
nolocalStorage
.fallbackData
noswr
para que independente da revalidação que ele esteja fazendo contra o endpoint real, ouser
será retornado instantaneamente.swr
conseguir revalidar, ouser
é atualizado./user
retornar401
ou403
, o itemuser
é deletado dolocalStorage
e ologinStatus
é setado como"logged-out"
.shouldRevalidate
controla se oswr
deve fazer uma tentativa de bater no endpoint/user
e essa variável é apenastrue
seloginStatus
estiver setado como"logged-in"
. Se estiver comofalse
, oswr
não tenta bater na rota.localStorage
do pessoal, até que decidirmos virar a chave.