d83a18fb4f
Just a suggestion: maybe a stable version of vue-apollo can be published after this wonderful ssr refactor?
196 lines
3.8 KiB
Markdown
196 lines
3.8 KiB
Markdown
# From vue-apollo 2 and Apollo 1
|
|
|
|
The main changes are related to the apollo client setup. Your components code shouldn't be affected. Apollo now uses a more flexible [apollo-link](https://github.com/apollographql/apollo-link) system that allows compositing multiple links together to add more features (like batching, offline support and more).
|
|
|
|
## Installation
|
|
|
|
### Packages
|
|
|
|
Before:
|
|
|
|
```
|
|
npm install --save vue-apollo apollo-client
|
|
```
|
|
|
|
After:
|
|
|
|
```
|
|
npm install --save vue-apollo@next graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag
|
|
```
|
|
|
|
### Imports
|
|
|
|
Before:
|
|
|
|
```js
|
|
import Vue from 'vue'
|
|
import { ApolloClient, createBatchingNetworkInterface } from 'apollo-client'
|
|
import VueApollo from 'vue-apollo'
|
|
```
|
|
|
|
After:
|
|
|
|
```js
|
|
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'
|
|
```
|
|
|
|
### Apollo Setup
|
|
|
|
Before:
|
|
|
|
```js
|
|
// Create the network interface
|
|
const networkInterface = createNetworkInterface({
|
|
uri: 'http://localhost:3000/graphql',
|
|
transportBatching: true,
|
|
})
|
|
|
|
// Create the subscription websocket client
|
|
const wsClient = new SubscriptionClient('ws://localhost:3000/subscriptions', {
|
|
reconnect: true,
|
|
})
|
|
|
|
// Extend the network interface with the subscription client
|
|
const networkInterfaceWithSubscriptions = addGraphQLSubscriptions(
|
|
networkInterface,
|
|
wsClient,
|
|
)
|
|
|
|
// Create the apollo client with the new network interface
|
|
const apolloClient = new ApolloClient({
|
|
networkInterface: networkInterfaceWithSubscriptions,
|
|
connectToDevTools: true,
|
|
})
|
|
```
|
|
|
|
After:
|
|
|
|
```js
|
|
const httpLink = new HttpLink({
|
|
// You should use an absolute URL here
|
|
uri: 'http://localhost:3020/graphql',
|
|
})
|
|
|
|
// Create the subscription websocket link
|
|
const wsLink = new WebSocketLink({
|
|
uri: 'ws://localhost:3000/subscriptions',
|
|
options: {
|
|
reconnect: true,
|
|
},
|
|
})
|
|
|
|
// using the ability to split links, you can send data to each link
|
|
// depending on what kind of operation is being sent
|
|
const link = split(
|
|
// split based on operation type
|
|
({ query }) => {
|
|
const { kind, operation } = getMainDefinition(query)
|
|
return kind === 'OperationDefinition' &&
|
|
operation === 'subscription'
|
|
},
|
|
wsLink,
|
|
httpLink
|
|
)
|
|
|
|
// Create the apollo client
|
|
const apolloClient = new ApolloClient({
|
|
link,
|
|
cache: new InMemoryCache(),
|
|
connectToDevTools: true,
|
|
})
|
|
```
|
|
|
|
### Plugin Setup
|
|
|
|
Before:
|
|
|
|
```js
|
|
// Create the apollo client
|
|
const apolloClient = new ApolloClient({
|
|
networkInterface: createBatchingNetworkInterface({
|
|
uri: 'http://localhost:3020/graphql',
|
|
}),
|
|
connectToDevTools: true,
|
|
})
|
|
|
|
// Install the vue plugin
|
|
Vue.use(VueApollo, {
|
|
apolloClient,
|
|
})
|
|
|
|
new Vue({
|
|
// ...
|
|
})
|
|
```
|
|
|
|
After:
|
|
|
|
```js
|
|
const httpLink = new HttpLink({
|
|
// You should use an absolute URL here
|
|
uri: 'http://localhost:3020/graphql',
|
|
})
|
|
|
|
// Create the apollo client
|
|
const apolloClient = new ApolloClient({
|
|
link: httpLink,
|
|
cache: new InMemoryCache(),
|
|
connectToDevTools: true,
|
|
})
|
|
|
|
// Install the vue plugin
|
|
Vue.use(VueApollo)
|
|
|
|
// Create a provider
|
|
const apolloProvider = new VueApollo({
|
|
defaultClient: apolloClient,
|
|
})
|
|
|
|
// Use the provider
|
|
new Vue({
|
|
apolloProvider,
|
|
// ...
|
|
})
|
|
```
|
|
|
|
## Mutations
|
|
|
|
Query reducers have been removed. Use the `update` API to update the cache now.
|
|
|
|
## Subscriptions
|
|
|
|
### Packages
|
|
|
|
Before:
|
|
|
|
```
|
|
npm install --save subscriptions-transport-ws
|
|
```
|
|
|
|
After:
|
|
|
|
```
|
|
npm install --save apollo-link-ws apollo-utilities
|
|
```
|
|
|
|
### Imports
|
|
|
|
Before:
|
|
|
|
```js
|
|
import { SubscriptionClient, addGraphQLSubscriptions } from 'subscriptions-transport-ws'
|
|
```
|
|
|
|
After:
|
|
|
|
```js
|
|
import { split } from 'apollo-link'
|
|
import { WebSocketLink } from 'apollo-link-ws'
|
|
import { getMainDefinition } from 'apollo-utilities'
|
|
```
|
|
|
|
Learn more at the [official apollo documentation](https://www.apollographql.com/docs/react/2.0-migration.html). |