DEV Community

Cover image for Construindo Apps Local-First com Legend State no React Native

Construindo Apps Local-First com Legend State no React Native

Luma Montes on May 16, 2025

Se você quiser ir direto para o código, esse repositório aqui tá contendo uma API e um app com Expo que implementam tudo que falei nesse artigo: L...
Collapse
 
pedrovian4 profile image
pedrovian4

Bom demais, o processo de sincronização ocorre também quando o App está aberto em background?

Collapse
 
lumamontes profile image
Luma Montes

valeu migo <3 se não me engano, o processo de sync deles funciona apenas quando a conexão é retomada dentro do aplicativo ativo. mas também tem a opção de sincronização manual, então provavelmente é possível implementar de forma personalizada a sincronização em background usando um expo-background-task da vida!

Collapse
 
pedrovian4 profile image
pedrovian4

Uh nice, vou da uma testadaa

Collapse
 
lorenalgm profile image
Lorena GM

Arrasou! Bem interessante esse Legend State

Collapse
 
corpas profile image
Benjamin

Olá, seu projeto está ótimo. Consegui testá-lo em um POC interno.

A única coisa que não consegui fazer foi capturar os erros de chamada no front end.

Você poderia me ajudar com isso?

Atenciosamente e muito obrigado. Bom trabalho 😁

Collapse
 
lumamontes profile image
Luma Montes

oiee, que bom que deu certo!! posso ajudar sim, como você tem tentado capturar os erros?

Collapse
 
corpas profile image
Benjamin

Olá, muito obrigado por sua resposta.

Tentei capturar no front-end qualquer erro de uma solicitação que é executada na sincronização de engenharia/estado, mas parece que, da forma como está implementado, esse erro não aparece na exibição.

Você pode confirmar que nenhum desses erros está ocorrendo? Porque estou um pouco confuso.

Saudações e obrigado ✌️

Thread Thread
 
lumamontes profile image
Luma Montes

Entendi!! Dei uma testada aqui forçando o erro da requisição e realmente não apareceu na exibição!! Provavelmente porque no meu exemplo, tô usando o retry de forma infinita sem um try catch. ou seja, vai ficar sempre tentando novamente e não dispara o erro.

Adicione um try catch por volta da chamada a API ( e precisa dar um throw no erro quando a resposta não estiver OK e no catch também) e remova o retry infinito, deixa em um valor menor tipo tentar umas 3 vezes! Acho que assim dá bom

export const postStore$ = observable(syncedCrud({
...resto
retry: {
times: 1
},
syncMode: 'auto',
fieldUpdatedAt: 'updatedAt',
fieldCreatedAt: 'createdAt',
}));

const getPosts = async () => {
try {
const response = await fetch(${API_URL}/psosts); //Url errada pra forçar erro
if(!response.ok) {
throw new Error(Error fetching posts: ${response.statusText}); // Isso vai ir lá pro error que está sendo renderizado no front
}
const data = await response.json();
return data.data;
} catch (error) {
console.error('Error fetching posts:', error);
throw error; //Precisamos lançar o erro pra propagar
}
};

Thread Thread
 
corpas profile image
Benjamin

Muito bem, isso é ótimo! Muito obrigado por sua atenção, você foi de grande ajuda.

Boa sorte em seus próximos projetos 😁✌️

Collapse
 
igordepaula profile image
Igor C. de Paula

Muito interessante, estou batendo cabeça com ele já algum tempo, como você faria pra usar ele armazenando token do login?

Collapse
 
lumamontes profile image
Luma Montes

valeu! dá pra criar uma store/estado usando observable só pra essa parte de autenticação,e após o login você vai popular a store de autenticação com as informações do usuário, como o token do login. ae depois você pode puxar esse token em várias telas pra fazer chamadas autenticadas a api, por exemplo, e quando o usuário for deslogar remove as infos

Collapse
 
igordepaula profile image
Igor C. de Paula

Baixei o seu codigo e nao deu muito certo nao XD, ele nao guarda nem no app nem na api (sim usei ngrok, e mesmo usando postman like a api recebia normalmente as requisicoes), é justamente este erro que estou recebendo. Nem sei por onde comecar a debugar porque nao apresenta nenhum error ou warning no terminal.

Thread Thread
 
lumamontes profile image
Luma Montes

hmmm não faço ideia do que possa ser iahsush, precisaria ver algum print ou video reproduzindo o erro! o repositorio é publico, se quiser você pode abrir uma issue com mais detalhes lá pelo github e ae consigo entender melhor :)

Collapse
 
igordepaula profile image
Igor C. de Paula

Você teria um exemplo? Meus testes são assombrosos, ao tentar popular a store simplesmente nenhum console.log depois eh exibido no terminal, e sequer recebi mensagem de erro.

Thread Thread
 
lumamontes profile image
Luma Montes

pior que publico num tenho nenhum exemplo, mas se tu tiver algum repo com suas tentativas pode mandar que dou uma olhadinha