J'ai une liste des périphériques Bluetooth détectés, deviceList
qui est configuré avec useState
:
const [deviceList, setDeviceList] = useState([]);
J'ai un bouton qui déclenche l'analyse des appareils. J'ai besoin que la liste des dispositifs soit réinitialisée à []
à chaque fois qu'un scan démarre. Je le fais :
const scanForDevices = () => {
setDeviceList([]);
manager.startDeviceScan(null, null, (error, device) => {
// add device to device list
setDeviceList(old => [...old, device]);
}
}
Le problème est que setDeviceList
n'est pas synchrone, et deviceList
n'est pas réinitialisé au moment où le nouveau périphérique est censé être ajouté. Il peut en résulter des dispositifs en double. Je peux éviter les doublons en filtrant, mais ce n'est qu'une astuce pour résoudre le problème actuel.
Je ne peux pas utiliser useEffect pour résoudre ce problème, alors ne le suggérez pas. startDeviceScan
ne peut pas être exécuté à chaque fois deviceList
changements.
Comment des situations comme celle-ci sont-elles résolues en l'absence d'un système véritablement atomique ? setState
?