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

207
Visualizações
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 à 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