一些上下文:我正在开发一个 React JS 应用程序,它从数据库中读取地理点并以各种方式绘制/映射它们。有原始地图和图表直接显示来自数据库的数据,但也有图表和指标涉及对斜率图、图下面积、直方图、欧几里德距离等点的分析。
我设置了一个 GraphQL 客户端,用于将数据提供给安装了 Apollo-Client 的 React 应用程序。这是 GraphQL 响应的示例:
{
"data": {
"Points": [
{
"pid": 13196,
"x": 251.88491821289062,
"y": 374.1650085449219
},
{
"pid": 13197,
"x": 257.6238708496094,
"y": 374.17498779296875
},
{
"pid": 13198,
"x": 264.04315185546875,
"y": 374.5350036621094
},
...etc
]
}
}
这很棒!对于至少 2 个不同的数据视图来说,这是正确的形状,Apollo 客户端为我缓存了它,我InMemoryCache根本不需要 redux。
困境:我需要的一堆图涉及许多可重用的派生值(就像我可能在 2 个不同视图中使用斜率值一样)。我应该在哪里存储我的派生数据?
现在我把所有的计算都塞进了 Reactrender()方法中,但这似乎不是一个好主意。
选项:
- 将 Redux 用于派生数据,将所有计算放入 reducer 并以某种方式使其与 Apollo graphql 缓存中的内容保持同步。
- 在服务器上进行派生(然后我可以缓存)并通过网络发送原始 + 派生。更多的网络流量,但更少的客户端计算。
render()每当传入的 graphql 数据发生变化时,继续计算内部的派生值。- 可能是我没想到的……