反应订阅多播响应

React Subscribing on a Multicast Response

我正在使用 react-native 和 react-native-ssdp 库实现 SSDP 设备发现应用程序。基本上我正在做的是;

为 ssdp 设备多播到网络并将它们列在我的屏幕上。为了做listing;

我有一个在 ssdp 响应上注册的函数。每次收到来自设备的响应时,我们都会像 setDeviceList([...deviceList, newDevice]); 一样更新状态,但是由于设备响应如此之快(不到半秒),竞争条件就会发生,然后更新会丢失真实列表。在这种情况下,我只能看到列表中最后一个响应的设备。

我该如何解决这个问题?

我假设您已将 useState 用于 deviceList。 useState 的 set-Method 可以采用直接参数或函数,其中输入参数是状态的当前值。所以你可以尝试这样的事情:


 const [deviceList, setDeviceList] = useState([])
...
 setDeviceList((currentDeviceList) => [...currentDeviceList, newDevice])

或者使用 redux 之类的东西并将每台设备分派到商店。这些消息将排队,您应该避免竞争条件。