React+Umi4的项目,把WebSocket放在model里,连接里返回的值是即时更新的,但该值再组件里拿到的是第一次得值

image.png这是models里的代码,在该model里建立了一个WebSocket长链接,latestMessage里存储每次返回的新值,并且每次的返回值都会有输出
image.png这是在组件里使用该model,zoneMap的值永远是第一次返回得值,以后再返回的值都拿不到。

阅读 3.1k
1 个回答

useRef 除了可以用来获取dom/jsx实例外,另外一个重要的作用就是保存一个 “不随着组件每个更新而变化的一个值,相当于是在es6模块内维护了一个独立变量”。明白这个之后,不建议用 useRef 来储存 latestMessage

你这个问题可能是因为 zoneMap.currentuseMemo 使用这块,有点混乱,看着有问题。只是猜测,也有可能是 useWebSocketModel 这里的问题。你可以提供一个复现链接参考下。

可参考下面,不过还是觉得你用useRef 储存 latestMessage 不合适:

const [zoneMap, setZoneMap] = useState<any[]>([]);
useEffect(() => {
    setZoneMap(pre => pre.concat(latestMessage));
}, [latestMessage]);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题