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

302
Vistas
Problemas para lograr el resultado requerido al usar el operador de propagación (...) con objeto de estado

Tengo una inicialización del estado de pimRegistration como se muestra en la captura de pantalla de Chrome redux-devtools a continuación. El anidamiento al que se hace referencia es pimRegistration ( state.domain.patient ):

ingrese la descripción de la imagen aquí

Actualicé el patient.name con la siguiente declaración del operador de propagación:

 store.update((state) => ({ ...state, ...patientPath, ...{ [property]: value }, }));

...donde property es la propiedad "name" del objeto del paciente con value . Después de la actualización, la siguiente captura de pantalla muestra el nuevo estado:

Nuevo estado actualizado: color amarillo en la captura de pantalla

Tenga en cuenta que el objeto del paciente original (púrpura en la captura de pantalla) se actualiza con el nombre del objeto, se duplica y se coloca en la raíz del estado (amarillo en la captura de pantalla).

Me gustaría sobrescribir las propiedades del pimRegistration(state).domain.patient , no para crear un nuevo objeto de paciente.

La actualización de estado se llama como se muestra a continuación.

 store.update((state) => ({ ...state, ...patientPath, // state.domain.patient ...{ [property]: value }, }));

He probado mis diferentes combinaciones sin conseguir el resultado deseado.


La función de actualización completa se muestra a continuación.

 update(property: string, path: string, value: any) { const paths: string[] = path.split("."); const pathReducer = (state: IRegistrationState, path_: string) => { if (paths.length <= 0) { return state.domain; } return state[path_]; }; const domainPath = state.domain; let patientPath, nokPath, referrerPath; if (path.includes("patient")) { patientPath = paths.reduce(pathReducer, state); } if (path.includes("nok")) { nokPath = paths.reduce(pathReducer, state); } if (path.includes("referrer")) { referrerPath = paths.reduce(pathReducer, state); } store.update((state) => ({ ...state, ...patientPath, ...{ [property]: value }, })); }

La función anterior se invoca con la siguiente declaración en Angular 2.

 if (this.path.includes("patient")) { this._repo.update("name", "domain.patient", this.name); }

Gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Las actualizaciones profundas de una tienda pueden ser complicadas. En su función, parece estar difundiendo las actualizaciones en la raíz en lugar de en el nivel en el que desea la actualización. Esta respuesta aquí describe la práctica habitual para actualizar el estado. En resumen, algo como

 const newState = { ...state, domain: { ...state.domain, patient: { ...state.domain.patient, [property]: value } } }

Pasar dinámicamente una ruta y actualizar este estado puede ser... engorroso. Hay bibliotecas que pueden ayudarlo a hacerlo, como immer , pero posiblemente pueda abrirse camino con JS / TS normal.

about 4 years ago · Juan Pablo Isaza Denunciar
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