reactjs - 如何通过仅反应一次来增强 apollo 客户端的响应
问题描述
我做了一个 GraphQL 查询,在那里我得到了很多数据,然后我计算了最小值和最大值。由于计算非常耗时,我只想在收到值时才进行。不幸的props
是,即使没有新的调用,每次重新渲染组件时都会调用该方法,并且数据来自存储。如何将计算限制在我真正获得新数据的点
graphql(DataQuery, {
options: ({ id }) => ({
variables: {
id,
},
}),
props: ({ data: { result} }) => ({
data: result,
min: getMin(result),
max: getMax(result),
}),
})
解决方案
这个问题类似于redux中的问题,mapStateToProps()
每次 store 更新重复代价高昂的计算时都会再次调用。
您可以通过使用记忆选择器来解决这个问题:
import { createSelector } from 'reselect'
const getMinMax = createSelector(
result => result,
result => ({
min: getMin(result),
max: getMax(result),
})
)
graphql(DataQuery, {
options: ({ id }) => ({
variables: {
id,
},
}),
props: ({ data: {result} }) => ({
data: result,
...getMinMax(result), // will only re-calculate if result changed
}),
})
记忆选择器会记住调用的最后结果,并在后续调用中不断返回,只要输入没有改变。
推荐阅读
- javascript - 来自提交的 jquery 未正确处理,event.preventDefault() 无法正常工作
- c++ - 在 C++ 中有效地计算 O(n^(1/3)) 中数字的除数
- android - 为什么R类不包含字段类型?
- nestjs - nestjs 网关向所有连接的套接字发出事件
- c++ - 如何在 24 位 SDL_Surface 上设置像素颜色?
- apache - 如何在不重新启动服务器的情况下终止单个 apache 连接?
- mysql - 防止 MySQL 和 Devart MySQL 连接器中的并发冲突
- java - SSH Android Studio 连接到树莓派,未知问题
- android - 以编程方式完成的设备场交互式测试
- html - 随机化弹性盒顺序