-
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
Refatoração do componente Content
#378
Refatoração do componente Content
#378
Conversation
refactor(Content): and minor fixes in localStorage
Refatoração do componente `Content`
Refatoração do componente `Content`
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
…tion correction Re-reading the function to open the editor when reloading the page if it is saved in localStorage. Function correction to avoid reloading them
@andreghisleni is attempting to deploy a commit to the TabNews Team on Vercel. To accomplish this, @andreghisleni 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. |
Opaaa desculpa só ter enviado agora, eu só modifiquei as funções para evitar o recarregamento desnecessário das funções e adicionei novamente a verificação de que se existe conteúdo salvo no localstorage ele carregue o editor |
@andreghisleni por favor, peço que rode um |
Run lint:fix
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.
Oi @andreghisleni, não estava mais abrindo automaticamente o editor por questão de performance e também sugestão do @filipedeschamps aqui: #364 (comment)
Talvez seja interessante removermos o recurso de automaticamente abrir o modo de edição se for encontrado algo no localStorage e só se focar em carregar essas informações quando entrar nesse modo de fato, seja pelo clique no botão, ou seja por esse ser o modo padrão de um conteúdo
root
. O que acham?
Acho que a sugestão foi mais por causa do bug que estava ocorrendo naquele momento, mas pensei na questão de performance eu achei válida.
Por isso o acesso ao localStorage tinha sido movido para dentro do componente EditMode, para só ocorrer um acesso nos componentes já renderizados em modo de edição (ao clicar em "editar", "responder" ou Publicar novo conteúdo") ao invés de ocorrer um acesso a cada "conteúdo" ou "botão de responder" que for renderizado.
Pela experiência do usuário eu acho super válida a funcionalidade de abrir o modo de edição automaticamente sempre que carregar um conteúdo que contenha rascunho no loacalStorage, mas acredito que seja melhor essa decisão de iniciar o componente em modo de edição ser tomada por quem chama o componente Content, não dentro dele, pelo custo que a leitura do localStorage traz.
No caso de conteúdo root novo, ele sempre é carregado em modo de edição, então já vai ser carregado o rascunho.
No restante das alterações eu não percebi nenhum impacto positivo em utilizar useCallback nessas funções, já que elas não são passadas para outros componentes. Se tem algo que eu não estou enxergando, me dê uma clareada, por favor.
Por enquanto acredito que a versão do link abaixo está legal:
https://tabnews-git-refactor-content-preview3-tabnews.vercel.app/
Added check if the user is the owner of the publication to not check for all contents
Pronto agora adicionei a verificação de que se a publicação é do próprio usuário antes de buscar no Agora a questão de utilizar o |
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.
Edit: Tinha colocado resultados incorretos nos testes.
Agora a questão de utilizar o useCallback é principalmente questão de boas praticas, alem de evitar o recarregamento desnecessário
@andreghisleni, o useCallback evita a redefinição da função a cada renderização do componente onde ela é definida. Isso é mais útil para não causar o recarregamento de outros componentes que dependem da função. Mas em EditMode não temos outros componentes que dependem dessas funções, então a redefinição não causa nenhuma renderização extra.
Se quando diz recarregamento você está falando da redefinição das funções, então sim, isso pode ser reduzido mesmo no nosso caso. Fiz um teste para ter números para comparar os casos com e sem useCallback.
Utilizei esse código:
...
var funcCount = new Set()
export default function Content({ content, mode = 'view', viewFrame = false }) {
...
...
function EditMode() {
...
...
funcCount.add(loadLocalStorage);
funcCount.add(clearErrors);
funcCount.add(handleSubmit);
funcCount.add(handleChange);
funcCount.add(handleCancel);
console.log("Count: ", funcCount.size);
...
Número de redefinições de funções em cada caso
Commit | ee49e9e | 0245a73 | _ |
---|---|---|---|
Ação \ useCallback | Sem | Com | Funções redefinidas com useCallback |
Ao clicar em responder | 5 | 5 | Definição inicial de todas as 5 |
Ao navegar para publicar novo conteúdo | 15 | 15 | Cada uma 3 vezes |
No primeiro dígito escrito | 10 | 2 | handleSubmit e hancleCancel |
A cada dígito extra | 5 | 2 | handleSubmit e hancleCancel |
Ao voltar o foco para a aba | 5 | 2 | handleSubmit e hancleCancel |
Imagino que cada redefinição seja menos custosa sem o useCallback, então para as renderizações iniciais o caso sem useCallback deve ser um pouco mais rápido. Mas, após o carregamento, durante a digitação do conteúdo, ocorrem menos redefinições das funções com o useCallback. Então isso me convence de que é melhor utilizá-lo.
Só vou dar uma analisada melhor depois se não podemos diminuir as variáveis no array de dependências de alguma delas. Acho que consigo fazer isso amanhã e dou um retorno aqui.
Agora se está lhe incomodando muito o fato de não estar entrando automaticamente no modo de edição, acho mais interessante fazer essa mudança em outro componente. Vamos conversar mais sobre isso.🤝
const localStorageContent = localStorage.getItem(localStorageKey); | ||
if (isValidJsonString(localStorageContent)) { | ||
setComponentMode('edit'); | ||
if (user?.id && !isLoading && contentObject?.owner_id === user?.id) { |
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.
Pronto agora adicionei a verificação de que se a publicação é do próprio usuário antes de buscar no localstorage.
Opa @andreghisleni, isso não funciona para todos os casos! Só vai abrir o modo de edição para as alterações de conteúdos já postados. Não vai funcionar para rascunhos de novas postagens em resposta de outro conteúdo.
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.
Pois é eu percebi que não funciona para todos os casos, mas pelo menos na edição ele funciona
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.
Então vamos deixar assim, funcionando parcialmente e futuramente podemos corrigir.
Realmente faz sentido eu acho que acabei me confundindo com o caso do useCallback |
@aprendendofelipe como estou focado nas tarefas do backend, peço que feche esse PR e abra um na versão que devo fazer o merge na |
@andreghisleni e @filipedeschamps me perdoem, mas o primeiro teste tinha um erro enorme. Editei a resposta com o resultado correto e comentários atualizados. |
@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. |
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.
@filipedeschamps considerando a revisão dos testes, pode fazer o merge na main com todos os commits dessa PR.
O @andreghisleni colocou de volta a funcionalidade de abrir a edição automaticamente quando encontrar rascunho no localStorage para o caso de edição de conteúdo já postado. Só não abre automaticamente para novas respostas deixadas em rascunho, mas se clicar em responder, o rascunho estará lá.
Show!! Feito o merge e o PR novo é este: #385 |
PR para forçar deploy em Preview do PR #370 feito por @aprendendofelipe