我正在使用react-native和react-native- SSDP库实现一个SSDP设备发现应用程序。基本上我要做的是;
为ssdp设备多播到网络并在我的屏幕上列出它们。为了完成清单;
我有一个在ssdp响应上注册的函数。每次收到来自设备的响应时,我们都会像setDeviceList([...deviceList, newDevice]);
一样更新状态,但由于设备响应如此之快(不到半秒),竞争条件就会发生,然后更新就会丢失真实列表。在这种情况下,我只能看到列表中最后一个响应的设备。
如何解决这个问题?
我假设您已经为deviceList使用了useState
。useState的set-Method可以接受一个直接参数或一个函数,其中输入参数是状态的当前值。所以你可以尝试这样做:
const [deviceList, setDeviceList] = useState([])
...
setDeviceList((currentDeviceList) => [...currentDeviceList, newDevice])
或者使用redux之类的东西,将每个设备分派到存储中。这些消息将被排队,您应该避免竞争条件。