GraphQL的旅程(6)在Vue.js前端中加载GraphQL的最小化代码

使用 vue-apollo

我将使用GraphQL的API来构建一个前端应用程序,用来获取数据。
可以使用的框架包括React和Vue.js等。
这次我将使用Vue.js(React将在下次使用)。

除了Vue.js,我們還會使用apollo-client(GraphQL客戶端庫)和vue-apollo來方便地使用apollo。

    vue-apollo

在中文中有很少看到类似”hello world”的东西,
它以完整的全栈GraphQL进行介绍。

前提 tí)

假设在某个GraphQL服务器上存在用户API。

type User {
  id: ID! @unique
  name: String!
}

在安装了Vue的服务器上,首先要创建一个模板。

使用下面的命令创建模板。
将设置为使用路由器。

vue init webpack <アプリ名>

添加Vue-Apollo等库

yarn add vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-link-context apollo-cache-inmemory graphql-tag vue-moment

添加Vue组件

components/User.vueを追加


<template>
  <div>
    <h1>vue-apollo example: users</h1>
    <div v-for="user in users" :key="user.id">
        <div>{{ user.id }}, {{ user.name }}</div>
    </div>
</template>

<script>
import gql from 'graphql-tag'

const FeedQuery = gql`
{
  users {
    ...namename
  }
}
fragment namename on User {
  name
  id
}
`
export default {
  data: () => ({
    users: [{name: 'test'}]
  }),
  apollo: {
    users: {
      query: FeedQuery,
      loadingKey: 'loading'
    }
  }
}
</script>

router/index.jsに/user/ルートを追加


import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import User from '@/components/User'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/user/',
      name: 'User',
      component: User
    }
  ]
})
    最後にmain.jsにGraphQLサーバへの接続を書く

import Vue from 'vue'
import { ApolloClient } from 'apollo-client'
import { HttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
import VueApollo from 'vue-apollo'
import App from './App'
import router from './router'

Vue.config.productionTip = false

// install the vue-momnet plugin
Vue.use(require('vue-moment'))
Vue.use(VueApollo)

const apolloProvider = new VueApollo({
  defaultClient: new ApolloClient({
    link: new HttpLink({ uri: 'http://<GraphQLサーバ>' }),
    cache: new InMemoryCache()
  })
})

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  provide: apolloProvider.provide(),
  components: { App },
  template: '<App/>'
})

文件的结构如下所示。添加或更新了★部分。

.
├── build
├── config
├── index.html
├── package.json
├── README.md
├── src
│   ├── App.vue
│   ├── assets
│   │   └── logo.png
│   ├── components
│   │   ├── HelloWorld.vue
│   │   └── User.vue ★
│   ├── main.js ★ (更新のみ)
│   └── router
│       └── index.js ★(更新のみ)
├── static
├── test
└── yarn.lock

启动


yarn dev

当您访问http://localhost:8080/#/user/时,Vue应用将会启动。

image.png
广告
将在 10 秒后关闭
bannerAds