![]() |
1
18
“存储有关同步的某种信息以进行优化” 当你有很多相互依存的实体时,这就成了一个非常困难的问题。 此外,构造客户端状态在大型应用程序中也是一个难题。redux社区中被视为最佳实践的经验法则是,在组件中使用redux状态树时,需要在redux状态树中规范化和移除冗余,并对其进行反规范化。 像relay和apollo这样的库希望拥有它们所管理的状态,以便它们可以从最终用户那里卸下规范化/非规范化数据的责任,并在很大程度上管理缓存(尽可能多),同时在需要时仍然为他们提供低级别的控制。
这是一个相当复杂的问题,因为不同的组件可能依赖于部分模型,例如。
如果您自己管理redux状态,则必须为以下内容编写代码:
当我们有相互依赖的实体时,或者当涉及实时协作或订阅时,这会变得更加复杂。 GraphQL库试图解决 以上所有内容 在a中 非常高效的网络方式 。使用react apollo或relay,您的组件可以声明它所需的全部内容和底层库,将智能地确定要获取的内容和数量。 这与编写react组件的原理相似:在渲染方法中,您声明最终组件层次结构应该是什么样子(给定当前状态),库(react)确定要对DOM进行哪些更改。 您应该评估您的用例是否从这种网络效率中受益,如果受益,您是否愿意投入时间学习GraphQL及其周围的生态系统。 如果一个redux存储和几个ajax调用足以满足您的用例,那么它可以是一个更简单的设置。 如果您决定全面使用GraphQL和Apollo,您可能根本不想使用redux。您可以使用 apollo-link-state 并使用graphql查询和变体管理所有数据(本地或远程)。然后,从组件的角度来看,某些数据是远程数据还是本地数据变得无关紧要。 说到这里,如果你真的想 只是 将redux与graphql一起使用,而不需要任何其他库,如可以使用的Relay Apollo client 直接地您可以调度 thunks 从组件,然后在thunks中,可以直接使用Apollo客户端进行graphql查询,一旦收到响应,就可以使用另一个动作调度将数据放在树中的树中。 如果这听起来更复杂,那是因为事实确实如此。 |
![]() |
Johan · 如何使用突变Apollo的突变 1 年前 |
![]() |
robC · 子解析器中的GraphQL参数 6 年前 |
![]() |
Mohamed Baher · 使用直接缓存访问时在映射内获取查询值 6 年前 |
![]() |
VikR · 阿波罗2号。x: 订阅解析程序未启动? 7 年前 |
![]() |
Sacha · GraphQL:成功突变后,我如何发出警告? 7 年前 |
|
macieks · 为什么我们不能将GraphQL仅用于Redux 7 年前 |