簡體   English   中英

如何使用Relay發送一次性查詢?

[英]How to send one-off query with Relay?

我正在嘗試使用中繼發送一次性查詢。 因此,我不一定要使用QueryRenderer而是要使用一個簡單的API發送查詢而不將結果綁定到React組件。

以前,這可以通過network上的fetch方法實現:

const checkVoteQueryText = `
  query CheckVoteQuery($userId: ID!, $linkId: ID!) {
    viewer {
      allVotes(filter: {
        user: { id: $userId },
        link: { id: $linkId }
      }) {
        edges {
          node {
            id
          }
        }
      }
    }
  }`
const checkVoteQuery = { text: checkVoteQueryText }
const result = await this.props.relay.environment._network.fetch(checkVoteQuery, {userId, linkId})

但是,似乎在某些較新版本的Relay中不建議使用fetch 現在有可以使用的替代方法嗎?

如果Relay不允許一次性查詢,我可能只是用graphql-request或普通的JS提取來完成工作。 但是能夠使用Relay會很好,因為它已經知道我的端點了。

嗯,這實際上很容易實現。 實際上,在this.props.relay.environment._network上調用fetch僅重用了創建時傳遞給Network的函數。 因此,可以重用此函數,在我的情況下,它稱為fetchQuery

Environment.js

import {GC_AUTH_TOKEN} from './constants'
import { SubscriptionClient } from 'subscriptions-transport-ws'

const {
  Environment,
  Network,
  RecordSource,
  Store,
} = require('relay-runtime')

const store = new Store(new RecordSource())

// Export it here so it can be reused in other files
export const fetchQuery = (operation, variables) => {
  return fetch('https://api.graph.cool/relay/v1/cj9h5g99s24fb0100nsp81d4y', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${localStorage.getItem(GC_AUTH_TOKEN)}`
    },
    body: JSON.stringify({
      query: operation.text,
      variables,
    }),
  }).then(response => {
    return response.json()
  })
}

const network = Network.create(fetchQuery)

const environment = new Environment({
  network,
  store,
})

export default environm

耳鼻喉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM