反应订阅多播响应
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 之类的东西并将每台设备分派到商店。这些消息将排队,您应该避免竞争条件。
我正在使用 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 之类的东西并将每台设备分派到商店。这些消息将排队,您应该避免竞争条件。