A framework for building GraphQL-driven Vue.js applications.
Install Vue and Relay using yarn or npm:
yarn add vue vue-relayRelay Modern requires a Babel plugin to convert GraphQL to runtime artifacts:
yarn add --dev babel-plugin-relay graphqlAdd "relay" to the list of plugins your .babelrc file:
{
"plugins": [
"relay"
]
}Please note that the "relay" plugin should run before other plugins or presets to ensure the graphql template literals are correctly transformed. See Babel's documentation on this topic.
Relay's ahead-of-time compilation requires the Relay Compiler, which you can install via yarn or npm:
yarn add --dev relay-compiler graphqlThis installs the bin script relay-compiler in your node_modules folder. It's recommended to run this from a yarn/npm script by adding a script to your package.json file:
"scripts": {
"relay": "relay-compiler --src ./src --schema ./schema.graphql"
}Then, after making edits to your application files, just run the relay script to generate new compiled artifacts:
yarn run relayNote: relay-compiler does not understand single-file components with a .vue extension. You can export graphql template literals in .js files, and then import them in .vue single-file components.
For more details, check out Relay Compiler docs.
environment: The Relay Environmentquery: The graphql tagged query. Note: To enable compatibility mode, relay-compiler enforces the query to be named as<FileName>Query. Optional, if not provided, an empty props object is passed to the render callback.variables: Object containing set of variables to pass to the GraphQL query, i.e. a mapping from variable name to value. Note: If a new set of variables is passed, the QueryRenderer will re-fetch the query.
props: Object containing data obtained from the query; the shape of this object will match the shape of the query. If this object is not defined, it means that the data is still being fetched.error: Error will be defined if an error has occurred while fetching the query.retry: Reload the data. It is null ifquerywas not provided.
<!-- Example.vue -->
<template>
<query-renderer :environment="environment" :query="query" :variables="variables" v-slot="{ props, error, retry }">
<div v-if="error">{{ error.message }}</div>
<div v-else-if="props">{{ props.page.name }} is great!</div>
<div v-else>Loading</div>
</query-renderer>
</template>
<script>
import { QueryRenderer, graphql } from 'vue-relay'
export default {
name: 'example',
components: {
QueryRenderer
},
data () {
return {
environment: ..., // https://relay.dev/docs/en/relay-environment.html
query: graphql`
query ExampleQuery($pageID: ID!) {
page(id: $pageID) {
name
}
}
`,
variables: {
pageID: '110798995619330'
}
}
}
}
</script>createFragmentContainer([component, ]fragmentSpec)- fragments as specified by the fragmentSpec
{
relay: {
environment,
},
// Additional props as specified by the fragmentSpec
}createRefetchContainer([component, ]fragmentSpec, refetchQuery)- fragments as specified by the fragmentSpec
{
relay: {
environment,
refetch(),
},
// Additional props as specified by the fragmentSpec
}createPaginationContainer([component, ]fragmentSpec, connectionConfig)- fragments as specified by the fragmentSpec
{
relay: {
environment,
hasMore(),
isLoading(),
loadMore(),
refetchConnection()
},
// Additional props as specified by the fragmentSpec
}QueryRendererdoes not take render function.vue-relayreplaces it with scoped slots.
- Container creating functions take
componentas an optional argument.- If provided, a conatiner will pass props to the given
component. - If ommited, a conatiner will pass props to its default scoped slot.
- If provided, a conatiner will pass props to the given
Other APIs are exactly same as Relay's Public APIs. Please refer to Relay's documentation.
The vue-relay-examples repository contains an implementation of TodoMVC. To try it out:
git clone https://github.com/ntkme/vue-relay-examples.git
cd vue-relay-examples/todo
npm install
npm run build
npm startvue-relay is BSD-2-Clause licensed.
Relay is MIT licensed.