Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Seletor assíncrono e componente Suspense fazem o mesmo que o hook useEffect?

Olá.

No vídeo dessa aula, foi mostrado como criar um seletor assíncrono para obter os dados de evento de uma API e usar esse seletor como valor default de um átomo. Também foi usado o componente Suspense para aguardar a finalização da chamada assíncrona.

Por favor, gostaria de saber se essa abordagem não seria semelhante ao que fazemos ao utilizar o useEffect para obter dados quando um componente carrega. No caso do Recoil, isso é feito da maneira como mostrada no vídeo, ou é só uma das soluções?

Eu tentei fazer isso aplicando um useEffect no componente ListaDeEventos, mantendo o átomo listaDeEventosState vazio por default e sem usar o componente Suspense e, aparentemente, funcionou:

// atom.ts
export const listaDeEventosState = atom<IEvento[]>({
    key: 'listaDeEventosState',
    default: []
});

// componente ListaDeEventos
const setEventos = useSetRecoilState(listaDeEventosState);

useEffect(() => {
    // obtém os dados da API
    fetch('http://localhost:8080/eventos')
      .then(response => response.json())
      .then((data: IEvento[]) => setEventos(data.map(evento => ({
        ...evento,
        inicio: new Date(evento.inicio),
        fim: new Date(evento.fim),
      }))))
}, [])
1 resposta
solução!

Faaala Matheus, tudo bem?

A abordagem mostrada no vídeo utilizando um seletor assíncrono e o componente Suspense é uma das soluções possíveis para lidar com chamadas assíncronas e carregamento de dados em um componente React com Recoil. Porém, o uso do useEffect para obter dados quando um componente carrega também é uma solução válida e pode ser utilizada, como você mesmo testou e comprovou.

A principal diferença entre as duas abordagens é que o seletor assíncrono e o componente Suspense são específicos do Recoil e foram criados para lidar com o gerenciamento de estado de forma mais eficiente e organizada, enquanto o useEffect é um hook padrão do React que pode ser utilizado em qualquer situação que envolva efeitos colaterais.

Ambas as abordagens são válidas e podem ser utilizadas de acordo com a necessidade do projeto e preferência do desenvolvedor. O importante é entender as diferenças e vantagens de cada uma delas para escolher a melhor opção em cada situação.

Espero ter ajudado e bons estudos!