4
respostas

O estado não atualiza, e também algumas dúvidas sobre o recoil

Bom dia, tudo bem ? Fiz alguns testes no projeto e aquele bug de não atualizar a data quando clica e arrasta o evento para outro dia ainda acontece nos eventos criados mas não acontece nos eventos que estão no default, não consegui resolver isso e meu código na parte de adicionar está idêntico olha:

Hook adicionar:


import { useRecoilState } from "recoil";
import { IEvento } from "../../interfaces/IEvento";
import { listaDeEventosState } from "../atom";
import { v4 as uuidv4 } from 'uuid';


export const useAdicionarEvento = () => {
    const [listaDeEventos, setListaDeEventos] = useRecoilState<IEvento[]>(listaDeEventosState);
    return (evento: IEvento) => {
        const hoje = new Date();
        if(evento.inicio < hoje){
            throw new Error("Eventos não podem ser cadastrados com data anterior a atual.")
        }
        evento.id = uuidv4();
        const novaLista = [...listaDeEventos, evento];
        return setListaDeEventos(novaLista);
    }
}

`

Uma coisa que reparei é que parece que ele não está atualizando o estado quando se adiciona um evento: ![](Print do projeto) ![](Segundo print do projeto) Eu coloquei para iniciar com 4 eventos e depois adicionei mais 1, então no caso era pra ficar 5 mas ele não mostra no console o 5 evento e quando eu vou mover ele de um dia para o outro não atualiza essa informação em filtros. Pode me ajudar ?

4 respostas

Salve, Rafael!

Consegue compartilhar seu código no github pra gente dar uma olhada?

Opa, consigo sim. Segue: https://github.com/rafaelmfs/Alura-Event-Tracker

Boa, Rafael.

Então, vamos fazer um ajuste para que tudo funcione como o esperado. Podemos passar a diante o evento para a função que faz a atualização, já convertido:

  // src/components/Calendario/index.tsx
  const onEventDragFinish: OnEventDragFinish = (
    kalendEventoInalterado: CalendarEvent,
    KalendEventoAtualizado: CalendarEvent,
  ) => {
    const evento = {
      id: KalendEventoAtualizado.id,
      descricao: KalendEventoAtualizado.summary,
      inicio: new Date(KalendEventoAtualizado.startAt),
      fim: new Date(KalendEventoAtualizado.endAt)
    } as IEvento
    atualizarEvento(evento)
  };

Assim, tudo vai funcionar como o esperado. Consegue testar daí também?

;)

Vida longa e próspera.

Muito obrigado, funcionou. Qual era o problema ?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software