Pregunta simple, estoy seguro de que estoy siendo estúpido y es una solución fácil. Tener una matriz de objetos y desea acceder al valor visual de cada objeto y cambiarlo a través de mi bucle for. No entiendo por qué no funciona.

onSearch = keyWord => {
    let newMarkers = this.state.markers;
    for (let i = 0; i<this.state.markers.length;i++) {
      if (this.state.markers[i].name.toLowerCase().includes(keyWord.toLowerCase())) {
        newMarkers[i].vis = true;
      } else {
        newMarkers[i].vis = false;
      }
    }
    console.log(newMarkers);
    //console.log to see if the vis value has been changed: spoiler alert it hasn't :(
    this.setState({markers: newMarkers});

    console.log(this.state.markers)
  }
1
ZKJ 24 jun. 2020 a las 06:14

2 respuestas

La mejor respuesta

Mantiene el estado sin cambios en su caso. Para superarlo, puede adaptar una solución rápida a esto. Sigue el código.

const jsonNewMarkers = JSON.stringify(newMarkers);
this.setState({markers: JSON.parse(jsonNewMarkers)}, () => {
  // use this callback function to do stuff AFTER state changes
  console.log(this.state.markers);
});

Y por favor pruebe la solución y hágamelo saber. Debería funcionar como el mío funciona.

2
sibabrat swain 24 jun. 2020 a las 03:30

setState es asíncrono. Por lo tanto, debe escribir el código de la siguiente manera:

onSearch = keyWord => {
  let newMarkers = this.state.markers;
  for (let i = 0; i<this.state.markers.length;i++) {
    if (this.state.markers[i].name.toLowerCase().includes(keyWord.toLowerCase())) {
      newMarkers[i].vis = true;
    } else {
      newMarkers[i].vis = false;
    }
  }
  console.log(newMarkers);
  this.setState({markers: newMarkers}, () => {
    // use this callback function to do stuff AFTER state changes
    console.log(this.state.markers);
  });
}
1
see sharper 24 jun. 2020 a las 03:21