Skip to content

v11.0.0

Compare
Choose a tag to compare
@jstejada jstejada released this 09 Mar 14:56

For our announcement on Relay Hooks, check out our blog posts on relay.dev and Facebook Open Source. For docs, see our updated docs website at relay.dev/docs, and for an update on our upcoming releases, see this issue.

Breaking

  • New version of fetchQuery:
    • New: New version of fetchQuery now returns a lazy Observable which you can subscribe to. It will perform in-flight request de-duping of identical requests. Ignores any Network Layercaching by default, but supports a [fetchPolicy](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#fetch-policies) to check data cached in the Relay Store.
    • Deprecated: Previous version of fetchQuery renamed to **** fetchQuery_DEPRECATED. Previous behavior returns a Promise (can’t be observed). No request de-duping.
    • Changes in Exports:
      • react-relay: fetchQuery exported from react-relay now has updated behavior and function signature. To access previous version of fetchQuery, import fetchQuery_DEPRECATED from react-relay or react-relay/legacy.
      • relay-runtime: fetchQuery exported from relay-runtime now has updated behavior and function signature. To access previous version of fetchQuery, import fetchQuery_DEPRECATED from relay-runtime.
  • getDataID was renamed from UNSTABLE_DO_NOT_USE_getDataID. This config option is now stable. It can be passed to the Relay Environment and Relay Store as an option that will be used to compute the Data ID for the given record.
  • Default value for gcReleaseBufferSize is now 10 (previously 0).
    • When a query is manually released, for example when a query component unmounts (QueryRenderer or useLazyLoadQuery), Relay will temporarily retain the query in the “release buffer” until the buffer is full. With a buffer size of 0, released queries would not go into the buffer and would be immediately removed from the store cache.
    • With a default buffer size of 10, this means that queries will remained cached in the store for a longer period of time after they unmount, which allows fetch policies like store-or-network. to actually reuse cached data when navigating back to previously visited views.

If upgrading from experimental release

  • The default UNSTABLE_renderPolicy is now always “partial”. We don’t expect this to produce any issues, and will only affect you if you are upgrading from an experimental release. This option can still be configured, but we will completely remove it in the upcoming releases.

Added

Relay Hooks

  • New Relay Hooks APIs added to react-relay and react-relay/hooks. See this issue for more details.
    • relay-experimental has been removed from the source code, and no new experimental builds will be published to npm.
    • We will share more external communications with the community as well as publish our updated docs once a stable release is published.
  • New version of fetchQuery added. See description in Breaking Changes.

General

  • Added ConnectionHandler.getConnectionID to make it easier to get a connection ID for usage in updaters or declarative connection mutations (@kyarik: #3332)

Improvements

If upgrading from experimental release

  • Hooks are now resilient to React effects being re-invoked (e.g. during Fast Refresh).
  • Un-actionable warning that fired when fragment data was missing without being fetched has been removed.
  • loadQuery accepts a fetchPolicy of 'store-only'
  • loadQuery now warns, instead of throwing, if called during the render phase.

General

  • getDataID is now a stable config option. See description in Breaking Changes.
  • Default value for gcReleaseBufferSize is now 10. See description in Breaking Changes.
  • ConnectionHandler will no longer create edges with an undefined cursor field. This also applies to edges created via @appendNode or @prependNode. (#3278)
  • Several tests migrated to be compile their graphql with Rust Compiler.

Fixed

If upgrading from experimental release

  • If loadQuery is called and no network request is made (i.e. if the data is available in the store and the fetch policy allows it), the query is retained in the environment.
  • loadQuery now includes the network cache config in the operation descriptor that is executed against the environment.