Laissez-moi vous dire que useEffect est exécuté une fois par défaut et qu'à chaque fois, le tableau des dépendances change.
Vérifiez l'exemple ci-dessous : :
import React,{ useEffect, useState } from "react";
const App = () => {
const [age, setAge] = useState(0);
const [ageFlag, setAgeFlag] = useState(false);
const updateAge = ()=>{
setAgeFlag(false);
setAge(age+1);
setAgeFlag(true);
};
useEffect(() => {
if(!ageFlag){
console.log('effect called without change - by default');
}
else{
console.log('effect called with change ');
}
}, [ageFlag,age]);
return (
<form>
<h2>hooks demo effect.....</h2>
{age}
<button onClick={updateAge}>Text</button>
</form>
);
}
export default App;
Si vous voulez que le callback setState soit exécuté avec les hooks, utilisez la variable flag et donnez un bloc IF ELSE OR IF à l'intérieur de useEffect de sorte que lorsque les conditions sont satisfaites, seul ce bloc de code s'exécute. Quel que soit le nombre de fois où l'effet s'exécute, le tableau des dépendances change, mais le code IF à l'intérieur de l'effet ne s'exécutera qu'en fonction de ces conditions spécifiques.
2 votes
Dans la classe component, j'ai utilisé async et await pour obtenir le même résultat que ce que vous avez fait pour ajouter un callback dans setState. Malheureusement, cela ne fonctionne pas dans le hook. Même si j'ai ajouté async et await, react n'attend pas la mise à jour de l'état. Peut-être que useEffect est le seul moyen de le faire.
2 votes
@Zhao, vous n'avez pas encore marqué la bonne réponse. Pouvez-vous gentiment nous accorder quelques secondes