#reactjs #react-native #race-condition #ssdp
Вопрос:
Я внедряю приложение для обнаружения устройств SSDP с использованием библиотеки react-native и react-native-ssdp. В основном то, что я делаю, это;
Многоадресная передача в сеть для устройств ssdp и их отображение на моем экране. Для того, чтобы сделать список;
У меня есть функция, которая регистрирует ответы ssdp. Каждый раз, когда мы получаем ответ от устройства, мы обновляем состояние, setDeviceList([...deviceList, newDevice]);
но, поскольку устройства реагируют так быстро (менее половины секунды), возникает условие гонки, а затем обновление отсутствует в реальном списке. В этом случае я вижу только последнее отвечающее устройство в списке.
Как я могу это исправить ?
Ответ №1:
Я предполагаю, что вы использовали useState
для списка устройств. Метод набора состояния использования может принимать прямой параметр или функцию, где входным параметром является текущее значение состояния. Так что вы можете попробовать что-то вроде этого:
const [deviceList, setDeviceList] = useState([]) ... setDeviceList((currentDeviceList) =gt; [...currentDeviceList, newDevice])
В качестве альтернативы используйте что-то вроде redux и отправляйте каждое устройство в магазин. Эти сообщения будут помещены в очередь, и вам следует избегать условий гонки.
Комментарии:
1. После этого вопрос отправил сообщение. Я нашел раздел функционального обновления в документации react ( жаль, что не видел его раньше) и сделал именно то, что вы предлагаете. Теперь его нет. !