Relay/Apollo片段的粒度应该是多少?

Yan*_*Tay 6 relay apollo reactjs graphql relayjs

我在我的应用程序中使用GraphQL + Relay,发现自己几乎包含了所有组件createFragmentContainer,包括DOM层次结构中非常低的组件(通常是功能组件).

这是使用片段的正确方法吗?我想知道何时在片段容器中包装组件的准则是什么?当一个组件只需要一个字段并且我可以通过props从父节点传递那些数据时,似乎是多余的.

我正在使用Relay,但我认为这些概念与Apollo相似.

Yan*_*Tay 5

这是我的接力队同事Jan Kassens的回答:

如果拆分组件对您有意义,那么您应该这样做。我发现较小的模块通常有助于使代码更易于理解。现在,一个Button组件可能不必附加一个片段,但是如果它是一个“ Like Page”按钮,且带有突变并且可能是特定于该页面的标签,那么我认为使其成为自己的片段是很有意义的容器。

与工程中的许多事情一样,在拆分时可能会有权衡取舍,但是我们花了很多心思来使片段容器尽可能轻巧高效,因此您不应该太费劲地考虑引入开销。


Den*_*ini 4

是的。您应该创建片段容器,并且每个组件查询自己的数据,而不是查询根组件上的所有数据并将其作为 props 传递给其他组件。由于中继数据屏蔽,来自片段的这些数据只能在需要它的组件内部看到。

也许这是一本很好的读物:https://medium.com/entria/relay-apollo-anti-pattern-d9f4dea47738

这是Data Masking: https: //facebook.github.io/relay/docs/en/thinking-in-relay.html

希望能帮助到你 :)