Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Reaccionar: estado de actualización condicional dentro del reductor

Introducción

Tengo un proveedor de contexto de reacción que tiene una matriz con estado de "publicaciones".

Mi idea es proporcionar 3 métodos, uno para agregar, otro para actualizar y un último para eliminar.

Entonces, si el usuario obtiene 10 publicaciones de la base de datos, deben guardarse en el proveedor de contexto:

 const newPosts = await fetchPosts(cursor, startAfter, limit); // Save the new posts in the Posts Context contents.addContents(newPosts);

pero, ¿qué pasa si una de estas publicaciones ya está guardada? Necesito ignorar las publicaciones ya agregadas.

Problema

Este es mi contexto de contenido:

 export function ContentsProvider({ children }) { const [contents, dispatch] = useReducer(contentsReducer, new Map([])); const addContents = (newContents) => { dispatch({ type: "add-contents", newContents, }); } ... return ( <ContentsContext.Provider value={{ addContents, ... }} > {children} </ContentsContext.Provider> ) }

¿Cómo puedo evitar agregar contenidos ya guardados? Quiero decir, ¿es la forma correcta de hacerlo dentro del método addContents o dentro de mi reductor?

 const contentsReducer = (contents, action) => { switch (action.type) { case "add-contents": { const { newContents } = action; return new Map([...contents, ...newContents]); } ... };

Lo pregunto porque el estado de actualización condicional dentro de un reductor me parece extraño, tal vez sea un antipatrón .

¿Algunas ideas?

Esta es mi solución actual:

 export default (contents, action) => { switch (action.type) { case "add-contents": { let { newContents } = action; // Avoid storing already added contents newContents = newContents.filter( (newContent) => !contents.get(newContent.id) ); if (!newContents.length) return contents; return new Map([...contents, ...newContents]); } ...
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda