【发布时间】:2019-01-31 08:29:54
【问题描述】:
一些背景:我正在开发一个 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 个不同的视图中使用斜率值)。我应该将派生数据存储在哪里?
现在我已经把所有的计算都塞进了 React render() 方法中,但这似乎不是一个好主意。
选项:
- 对派生数据使用 Redux,将所有计算放入 reducer,并以某种方式使其与 Apollo graphql 缓存中的内容保持同步。
- 在服务器上进行派生(然后我可以缓存)并通过网络发送原始+派生。更多的网络流量,但更少的客户端计算。
- 只要传入的 graphql 数据发生变化,就继续计算
render()中的派生值。 - 也许是我没有想到的……
【问题讨论】:
标签: reactjs graphql apollo react-apollo apollo-client