Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

300
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!