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

155
Vistas
¿Cómo actualizar el elemento en el estado de la matriz en reaccionar nativo?

¿Puede alguien decirme cómo puedo solucionar el problema "actualizado". No puedo actualizar los elementos dinámicamente, solo puedo actualizar manualmente.

Aquí está el código de modo

 // Function (async) for rename the playlist and update const renamePlaylist = async (el) => { try { const result = await AsyncStorage.getItem(STORAGE_KEY); if (result !== null || result !== '') { /* let filterArrayRenamePlaylist = playList.filter((val) => { if (val.id !== el ) { return val; } }); */ console.log(el, ' --------- el'); let renamePlayList = playList.filter((val) => { if ( val.title === el ) { let objIndex = playList.findIndex(obj => obj.title == val.title); playList[objIndex].title = el; // it is not updated ! console.log(el , ' ----------- el 2'); }; }); // const updateList = [...renamePlayList ]; setUpdate(context, {addToPlayList: null, playList: [...renamePlayList] }); return await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(renamePlayList)); } setRenamePlaylistModalVisible(false); } catch (error) { console.log(error) } }

Cuando trato de actualizar manualmente el título de la lista de reproducción de esta manera:

 let renamePlayList = playList.filter((val) => { if ( val.title === el ) { let objIndex = playList.findIndex(obj => obj.title == val.title); playList[objIndex].title = 'This works'; // This works // playList[objIndex].title = el; // This does not works console.log(el , ' ----------- el 2'); }; });

Busqué pero no pude encontrar una solución a mi problema.

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

0

echemos un vistazo más de cerca a su código y lo que está haciendo su código línea por línea, cometió algunos errores lógicos y de estilo de código allí:

 let renamePlayList = playList.filter((val) => { if ( val.title === el ) { let objIndex = playList.findIndex(obj => obj.title == val.title); playList[objIndex].title = el; // it is not updated ! console.log(el , ' ----------- el 2'); }; });

Problema 1: no escriba funciones engañosas, la función de filter no debe modificar nada, nadie esperará que haga eso, los efectos secundarios son malos. Considere separar la lógica de filtrado y modificación

Problema 2: la función de filtro debe devolver un valor, verdadero o falso. En su caso, no devuelve nada, void, por lo que en el fragmento de código que se encuentra arriba de su renamePlayList habrá una matriz vacía, [].

Problema 3: El problema lógico en sí.

  1. No necesita buscar objIndex, porque tiene el elemento val de la misma matriz Y la función de filtro de matriz proporciona un índice del elemento de procesamiento actual, eche un vistazo a los documentos: https://www.w3schools.com/jsref/ jsref_filter.asp (sección de sintaxis)

  2. playList[objIndex] es absolutamente igual a su objeto val en el primer val coincidente, si tiene más elementos con el mismo título, su código findIndex devolverá solo el primer elemento encontrado, todos los demás elementos permanecerán sin cambios

  3. Su declaración val.title === el y playList[objIndex].title = el; no tiene sentido debido a que el título es el en cualquier caso, como el título era el y lo está reasignando a el, si era "abc", reasignarlo a "abc" no cambiará nada. Your playList[objIndex].title = 'This works'; // This works exactamente porque está configurando un valor diferente.

Basado en eso, recomendaría cambiar su función de filtro a

 playList .filter((val) => val.title === el) .forEach((val) => val.title = "new title or whatever you need here, not el btw")

Este código modificará los elementos en la lista de reproducción, no estoy seguro de si se espera, pero si no, simplemente haga un clon profundo antes de procesarlo. su setUpdate también necesitará un pequeño cambio después de eso:

setUpdate(context, {addToPlayList: null, playList: [...playlist] });

Por favor, verifique dos veces qué está haciendo su código y qué está tratando de lograr. Supongo que su función de nivel superior necesita 2 parámetros, como oldTitle y newTitle, por lo que sería

 playList .filter((val) => val.title === oldTitle) .forEach((val) => val.title = newTitle)
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