<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          apollo-link-firebase

          聯(lián)合創(chuàng)作 · 2023-09-18 23:57

          npm version gitter

          Apollo-link-firebase

          apollo-link-firebase provides you a simple way to query Firebase in graphQL with Apollo-client without building a graphQL server

          Currently, we support features below:

          1. Query: All sorting and filtering methods on document are supported.
          2. Mutation: deal with set, update, remove methods with graphQL mutation.
          3. Realtime Subscription: Listen to your Firebase events using graphQL Subscription.
          4. Data Join: Retrieve your data from different paths using one graphQL.

          Contents

          Installation

          yarn add apollo-link-firebase

          Quickstart

          // rtdb stands for realtime database
          import {createRtdbLink} from 'apollo-link-firebase';
          import * as firebase from 'firebase';
          
          // initialize firebase
          firebase.initializeApp({
            // configs
          });
          
          // create Realtime Database link
          const rtdbLink = createRtdbLink({
            database: firebase.database()
          });
          
          const client = new ApolloClient({
            link: rtdbLink,
            cache: new InMemoryCache(),
          });
          
          // A simple query to retrieve data from 
          // firebase.database().ref("/profile/me")
          // @rtdbQuery stands for Realtime Database Query
          const query = gql`
            query myProfile {
              me @rtdbQuery(ref: "/profile/me") {
                name
              }
            }
          `;
          
          // Invoke the query and log the person's name
          client.query({ query }).then(response => {
            console.log(response.data.name);
          });

          Retrieve Object Data

          Return with __typename

          In Apollo client, InMemoryCache use __typename and id to save your data in store.

          Using @key directive, you can speficy which field you want to return with the key of snapshot

          const query = gql`
            query myProfile {
              me @rtdbQuery(ref: "/profile/me", type: "Profile") {
                id @key
                name
              }
            }
          `;

          Response

          {
            __typename: "Profile",
            id: "me",
            name: "wwwy3y3"
          }

          Work with Lists of Data

          For example, your data in Firebase could be like

          {
            users: {
              id1: {
                name: "alovelace",
                birth: 1815
              },
              id2: {
                name: "ghopper",
                birth: 1906
              }
            }
          }

          Basic Query

          We can query all users, and use @array directive to parse data to array

          const query = gql`
            query getUsers {
              users @rtdbQuery(ref: "/users", type: "Users") @array {
                id @key
                name
              }
            }
          `;

          Response

          [{
            __typename: "Users",
            id: "id1",
            name: "alovelace",
            birth: 1815
          }, {
            __typename: "Users",
            id: "id2",
            name: "ghopper",
            birth: 1906
          }]

          Advance Query

          In firebase client js sdk, We can get data by using sorting and filtering API

          We provide corresponding API in @rtdbQuery directive arguments. In the following example, we query lists of data using orderByChild("birth") and limitToFirst(1)

          const query = gql`
            query getUsers {
              users @rtdbQuery(ref: "/users", orderByChild: "birth", limitToFirst: 1, type: "Users") {
                name
              }
            }
          `;

          Response

          [{
            __typename: "Users",
            id: "id1",
            name: "alovelace",
            birth: 1815
          }]

          rtdbQuery Directive Arguments

          • ref: string
          • orderByChild: string
          • orderByKey: boolean. e,g orderByKey: true
          • orderByValue: boolean
          • startAt: any
          • endAt: any
          • equalTo: any
          • limitToFirst: number
          • limitToLast: number

          More Examples

          Mutation

          We only take payload from input key from the recommendations in this article

          const mutation = gql`
            fragment Input on firebase {
              string: String
              number: Number
            }
          
            mutation($ref: string, $input: Input!) {
              updateArticle(input: $input) @rtdbUpdate(ref: $ref, type: "Article") {
                id @key
                string
                number
              }
            }
          `;

          We support four directives for mutation

          • @rtdbUpdate: Firebase update
          • @rtdbSet: Firebase set
          • @rtdbRemove: Firebase remove
          • @rtdbPush: Push new element under ref, sugar api for firebase push and set

          Examples

          @rtdbRemove

          const mutation = gql`
            mutation($ref: string) {
              remove @rtdbRemove(ref: $ref)
            }
          `;

          @rtdbPush and @pushKey

          const mutation = gql`
            fragment ProfileInput on firebase {
              string: String
              number: Number
            }
          
            mutation($ref: string, $input: ProfileInput!) {
              pushdata(input: $input) @rtdbPush(ref: $ref) {
                id @pushKey
                string
                number
              }
            }
          `;
          
          // variables
          const variables = {
            ref: "/users",
            input: {
              string: "string",
              number: 1
            }
          }
          
          // response
          {
            id: "-KjCIvxsKueb3Hf2LIOp",
            string: "string",
            number: 1
          }

          Subscription

          We support four events in Firebase, more on Firebase document

          You can use all the query api supported in @rtdbQuery, more advanced query examples in wiki

          Usage

          const subQuery = gql`
            subscription {
              newComment @rtdbSub(ref: "/comments", event: "value") {
                id @key
                content
              }
            }
          `;

          Directives

          • value: @rtdbSub(ref: string, event: "value")
          • child_added: @rtdbSub(ref: string, event: "child_added")
          • child_changed: @rtdbSub(ref: string, event: "child_changed")
          • child_removed: @rtdbSub(ref: string, event: "child_removed")

          Example

          Simple Todo React Application

          Here's a simple React + apollo-link-firebase todo app

          Roadmap

          • support firebase transaction
          • support firestore
          • support authenticate mutation
          • support storage mutation

          Contribution

          Contributions are welcome and extremely helpful ??

          Feel free to join our gitter channel to discuss with us!

          瀏覽 2
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  后入极品美女在线 | 学生妹一级片,黄色的学生妹一级片 | 靠逼免费观看 | 国产一级片黄色视频网站 | 人人干人人操人人 |