Estoy usando useEffect para obtener el total de piezas del rompecabezas de mi almacenamiento asíncrono para que se muestren en la página de inicio. Utilizo el almacenamiento asíncrono para obtener la cantidad de rompecabezas almacenados en el almacenamiento y luego, para cada rompecabezas, agrego la cantidad total de piezas del rompecabezas. Hago esto dentro de useEffect ya que la cantidad total de piezas de rompecabezas puede cambiar dependiendo de si el usuario agrega más rompecabezas a su colección. Sin embargo, cuando uso useEffect, mi cantidad total de piezas de rompecabezas se actualiza constantemente y nunca se detiene.
Código:
let [totalPieces, setTotalPieces] = useState(0); const [numJigsaw, setNumJigsaw] = useState([]); const getNumOfJigsaw = async () => { try { setNumJigsaw(await AsyncStorage.getAllKeys()); } catch (e) {} return numJigsaw; }; const getAllJigsaw = async () => { let jigsaws = await getNumOfJigsaw(); for (let z = 0; z < jigsaws.length; z++) { let currentJigsaw = JSON.parse(await AsyncStorage.getItem(jigsaws[z])); setTotalPieces(totalPieces+ parseFloat(currentJigsaw.pieces)); } }; useEffect(() => { getAllJigsaw(); }, [totalPieces]);Creo que el problema se debe a que totalPieces depende. Aunque no estoy del todo seguro.
Sí, configuró el efecto para que se ejecute cuando cambie totalPieces (a través de la dependencia).
El efecto (cuando se resuelven las cosas asincrónicas) establece totalPieces , por lo que el efecto se ejecuta nuevamente debido a esa dependencia, etc., etc.
Parece que estás buscando algo como
const [totalPieces, setTotalPieces] = useState(0); const [jigsawKeys, setJigsawKeys] = useState([]); useEffect(() => { (async () => { const jigsaws = await AsyncStorage.getAllKeys(); let total = 0; for (let z = 0; z < jigsaws.length; z++) { let currentJigsaw = JSON.parse(await AsyncStorage.getItem(jigsaws[z])); total += parseFloat(currentJigsaw.pieces); } setJigsawKeys(jigsaws); setTotalPieces(total); })(); }, [totalPieces]); en general (cambié el nombre de numJigsaw a jigsawKeys para que tenga más sentido).