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

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

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 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!