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

272
Vistas
Tienda NGRX. No se puede asignar a la propiedad de solo lectura '18' del objeto '[matriz de objetos]'

Cuando intento crear una tienda ngrx, obtengo 7 errores.

TypeError: no se puede asignar a la propiedad de solo lectura '18' del objeto '[matriz de objetos]' | TypeError: no se puede asignar a la propiedad de solo lectura 'incompleteFirstPass' del objeto '[object Object]' | TypeError: no se pueden leer las propiedades de undefined (leyendo 'valor')

reductor.ts

 import { createReducer, on } from '@ngrx/store'; import { Fields } from '../fields.model'; import { addAllFields } from './fields.action'; export const initialState: Readonly<Fields> = { arrStart: [], arrEnd: [], }; export const fieldsReducer = createReducer( initialState, on(addAllFields, (state, { extArr }) => { return { ...state, arrStart: extArr }; }) );

acciones.ts

 import { TemplateRef } from '@angular/core'; import { createAction, props } from '@ngrx/store'; export const addAllFields = createAction( '[Fields Array]Add fields to starting array', props<{ extArr: TemplateRef<any>[] }>() );

campos.modelo.ts

 import { TemplateRef } from '@angular/core'; export interface Fields { arrStart: TemplateRef<any>[] | null; arrEnd: TemplateRef<any>[] | null; }

Sé que el estado debe ser inmutable y, por eso, devuelvo una copia de mi estado actual.

Tengo despacho en mi componente y debe haber un problema. console.log(fieldsArr) devuelve 2 TemplateRef

 constructor(private store: Store) {} ngOnInit(): void {} ngAfterViewInit() { const fieldsArr: TemplateRef<any>[] = [this.inputField, this.textareaField]; console.log(fieldsArr); this.store.dispatch(addAllFields({ extArr: fieldsArr })); }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El problema probablemente sea el TemplateRef , porque estos se envían a la tienda, estos estarán congelados. No estoy 100% seguro, pero supongo que Angular muta el TemplateRef en la detección de cambios. Debido a que esta es la misma instancia que la que está congelada por la tienda, se genera este error.

about 4 years ago · Juan Pablo Isaza Denunciar

0

El TemplateRef se mutará, lo que está prohibido por la arquitectura de NGRX. Si desea utilizar TemplateRef en ngrx/store, debe desactivar las reglas de mutación para ngrx de esta manera:

 StoreModule.forRoot({}, { runtimeChecks: { strictStateImmutability: false, strictActionImmutability: false, } }),
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