这是models里的代码,在该model里建立了一个WebSocket长链接,latestMessage里存储每次返回的新值,并且每次的返回值都会有输出这是在组件里使用该model,zoneMap的值永远是第一次返回得值,以后再返回的值都拿不到。
useRef 除了可以用来获取dom/jsx实例外,另外一个重要的作用就是保存一个 “不随着组件每个更新而变化的一个值,相当于是在es6模块内维护了一个独立变量”。明白这个之后,不建议用 useRef 来储存 latestMessage。你这个问题可能是因为 zoneMap.current 和 useMemo 使用这块,有点混乱,看着有问题。只是猜测,也有可能是 useWebSocketModel 这里的问题。你可以提供一个复现链接参考下。可参考下面,不过还是觉得你用useRef 储存 latestMessage 不合适:const [zoneMap, setZoneMap] = useState<any[]>([]); useEffect(() => { setZoneMap(pre => pre.concat(latestMessage)); }, [latestMessage]);
useRef
除了可以用来获取dom/jsx实例外,另外一个重要的作用就是保存一个 “不随着组件每个更新而变化的一个值,相当于是在es6模块内维护了一个独立变量”。明白这个之后,不建议用useRef
来储存latestMessage
。你这个问题可能是因为
zoneMap.current
和useMemo
使用这块,有点混乱,看着有问题。只是猜测,也有可能是 useWebSocketModel 这里的问题。你可以提供一个复现链接参考下。可参考下面,不过还是觉得你用
useRef
储存latestMessage
不合适: