los miembros son un accesorio que llega al componente secundario desde el componente principal cuando uso splice en copymembers una copia de los miembros se actualiza en el componente principal
copyMembers = [...members] copyMembers[memberIndex].notes.splice(noteIndex,1);
pero en lugar de hacerlo como arriba, si uso el filtro, entonces no se actualiza en el componente principal. ¿Por qué sucede esto? ¿Cuál es la diferencia entre ellos?
copyMembers = [...members] copyMembers[memberIndex].notes = copyMembers[memberIndex].notes.filter((item : any) => item.notesId !== notesId)
El método
splice()
cambia el contenido de una matriz eliminando o reemplazando elementos existentes y/o agregando nuevos elementos en su lugar [1]
Esto explica el comportamiento que está viendo con el empalme. Está pasando los datos al elemento secundario y el elemento secundario actualiza la referencia real de la matriz, por lo que el componente principal se está actualizando.
El método
filter()
crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada [2]
Cuando usa el filtro, esto no sucede porque está creando una nueva matriz con todos los elementos que pasan los criterios.
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
[2] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Cuando copia una matriz en JS, solo hace una copia superficial. Esto significa que las propiedades anidadas comparten la misma referencia, en su caso, las notes
se comparten por referencia, por lo que si las modifica en la copia, se modifican en la fuente.
splice()
(mutable) modifica la matriz y, por lo tanto, también la matriz copiada, ya que comparten la misma referencia. filter()
(inmutable) crea una nueva matriz y no modifica la original.
El método filter() crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada. El método splice() cambia el contenido de una matriz eliminando o reemplazando elementos existentes y/o agregando nuevos elementos y devuelve los elementos eliminados. splice() cambia la matriz original