【问题标题】:How granular should Relay/Apollo fragments be?Relay/Apollo 碎片应该有多细?
【发布时间】:2019-04-04 01:40:02
【问题描述】:

我在我的应用程序中使用 GraphQL + Relay,发现自己几乎用 createFragmentContainer 包装了每个组件,包括那些在 DOM 层次结构中非常低的组件(通常是功能组件)。

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

我正在使用 Relay,但我认为这些概念也类似于 Apollo。

【问题讨论】:

    标签: reactjs graphql apollo relayjs relay


    【解决方案1】:

    这是我在 Relay 团队工作的同事 Jan Kassens 的回答:

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

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

    【讨论】:

    • 非常好!也感谢分享:)
    【解决方案2】:

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

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

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

    希望对你有帮助:)

    【讨论】:

    • 谢谢,您链接的文章为支持片段提供了一个很好的理由(:
    猜你喜欢
    • 2012-02-17
    • 2015-04-13
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多