redux 如何实现 pinia 的 $onAction 监听 dispatch 的触发? 拿到状态差集

110 天前
 edk24

我有一个场景是一次性加载大量的🚗在地图上打点;

然后通过 ws 更新"移动"的车, 从而更新地图上的点位.

ws 拿到数据并更新 redux 指定数组元素的数据已经完成了;

但是问题就是我如何在 react hooks 组件中监听差集数据呢?

--

vue pinia 的话我是这样做的

carStore.$onAction(({name, args}) => {
	// 业务逻辑...
})
1491 次点击
所在节点    React
6 条回复
chnwillliu
110 天前
useSelector
edk24
110 天前
@chnwillliu useSelector 如何得到差集呢, 主要是要差集

然后在地图上差异的更新点位, 而不是全部删了 又全部重新打点

statue: {
car:[]
}

拿到 car 变化的数据, 例如原本是 [1,2,3,4,5], 更新了 2 条 [1,4,3,4,6], 我要拿到 [4,6]
webszy
110 天前
参考 vue 的 dom diff 算法
iapplebear
110 天前
把每次变化后的数据计算好存到 car ,car 里面有就 filter 掉,没有就 concat 。useEffect(() => { doSomething(car) }, [car])
React 的依赖更新只会处理差异数据并不是批量替换的
daolanfler
110 天前
再加两个状态呗,newCars[], removeCards: [] dispatch 更新的时候把这两个状态一起更新了。如果你的地图组件是独立于 react 的,在 useEffect 里面可以增量更新移除。
如果地图组件也是 react 的话,那更新 cars 就行,不用设置多的状态,直接交给 React 去渲染得了。
edk24
110 天前
@daolanfler 我现在就是这样做的了, dispatch 更新时, 一边维护原有的数据, 一边记录本次的 car

然后在组件中使用 useSelector + useEffect 来 watch 车辆的更新

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1061129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX