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