Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

184
Visualizações
Cómo sincronizar AsyncStorage con mongoDB cuando hay conexión de red

Soy nuevo en reaccionar nativo y no sé cuál es la mejor manera de hacerlo. Tengo una matriz de objetos guardados en AsyncStorage que se ven así;

 [ { userId: 1, id: 1, title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", body: "quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto" }, { userId: 1, id: 2, title: "qui est esse", body: "est rerum tempore vitae sequi sint nihil reprehenderit dolor beatae ea dolores neque fugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis qui aperiam non debitis possimus qui neque nisi nulla" } ]

Puedo realizar una operación completa en AsyncStorage sin conexión a Internet. Sin embargo, quiero enviar estos datos a una base de datos mongoDB remota. Si existe una publicación, quiero que se actualice, si no existe, quiero que se cree la publicación.

Estoy usando redux. Entonces, lo que hice fue recorrer la matriz desde AsyncStorage, si un objeto tiene "_id", significa que el objeto ya existe en la base de datos, si no es así, crea el objeto así;

 useEffect(() => { posts.map((post) => { if(!("_id" in post)) { dispatch(sendNewPostToDatabase(post)) } else{ dispatch(updatePostInDatabase(post._id, post)) } }) },[posts])

la acción sendNewPostToDatabase se ve así;

 export const sendNewPostToDatabase = (post) => async (dispatch) => { try { const { data } = await api.createPost(post); let savedItems = []; const response = await AsyncStorage.getItem("queue"); if (response) savedItems = JSON.parse(response); const updatedList = await savedItems.map((item) => item.id === data.id ? data : item) dispatch({ type: FETCH_POSTS_BY_USER, payload: updatedList }); return AsyncStorage.setItem("queue", JSON.stringify(updatedList)); } catch (error) { console.log(error.response) } }

Y luego mi acción updatePostInDatabase se ve así;

 export const updatePostInDatabase = (id, post) => async (dispatch) => { try { await api.updatePost(id, post); } catch (error) { console.log(error); } }

El problema es que este enfoque da como resultado un bucle infinito, donde la aplicación sigue enviando los datos una y otra vez creando una nueva publicación de forma repetitiva, incluso si la publicación ya existe en la base de datos. Además, quiero enviar solo publicaciones nuevas y actualizar solo publicaciones con nuevos cambios. Por favor, ¿cómo puedo lograr esto de manera efectiva?

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda