mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Add an example with graphql-react (#5984)
Adds an example with [`graphql-react`](https://github.com/jaydenseric/graphql-react), using [`next-graphql-react`](https://github.com/jaydenseric/next-graphql-react). [`graphql-react`](https://github.com/jaydenseric/graphql-react) is a lightweight but powerful [GraphQL](https://graphql.org) client for React; the first [Relay](https://facebook.github.io/relay) and [Apollo](https://apollographql.com/docs/react) alternative with server side rendering.
This commit is contained in:
parent
a9f71e449d
commit
eb24e6ffc6
38
examples/with-graphql-react/README.md
Normal file
38
examples/with-graphql-react/README.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Next.js example with [`graphql-react`](https://github.com/jaydenseric/graphql-react)
|
||||||
|
|
||||||
|
[`graphql-react`](https://github.com/jaydenseric/graphql-react) is a lightweight but powerful [GraphQL](https://graphql.org) client for React; the first [Relay](https://facebook.github.io/relay) and [Apollo](https://apollographql.com/docs/react) alternative with server side rendering.
|
||||||
|
|
||||||
|
See how it can be used in a Next.js app for GraphQL queries with server side rendering and client side data hydration:
|
||||||
|
|
||||||
|
- In `pages/_app.js` a [custom `App` component](https://github.com/zeit/next.js#custom-app) is decorated with the [`withGraphQL`](https://github.com/jaydenseric/next-graphql-react/#function-withgraphql) [higher-order component](https://reactjs.org/docs/higher-order-components) from [`next-graphql-react`](https://github.com/jaydenseric/next-graphql-react), generating a `graphql` prop that populates the [`Provider`](https://github.com/jaydenseric/graphql-react#function-provider) component from [`graphql-react`](https://github.com/jaydenseric/graphql-react).
|
||||||
|
- In `pages/index.js` the [`Query`](https://github.com/jaydenseric/graphql-react#function-query) component from [`graphql-react`](https://github.com/jaydenseric/graphql-react) is used to query the [GraphQL Pokémon API](https://github.com/lucasbento/graphql-pokemon) and show a picture of Pikachu.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Download the example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/with-graphql-react
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Change directory to it:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd with-graphql-react
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Install it:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Run it:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
[![Deploy to now](https://deploy.now.sh/static/button.svg)](https://deploy.now.sh/?repo=https://github.com/zeit/next.js/tree/master/examples/with-graphl-react)
|
18
examples/with-graphql-react/package.json
Normal file
18
examples/with-graphql-react/package.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "next-graphql-react-example",
|
||||||
|
"private": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"cross-fetch": "^3.0.0",
|
||||||
|
"graphql-react": "^6.0.0",
|
||||||
|
"next": "^7.0.0",
|
||||||
|
"next-graphql-react": "^1.0.1",
|
||||||
|
"react": "^16.6.0",
|
||||||
|
"react-dom": "^16.6.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"dev": "next",
|
||||||
|
"build": "next build",
|
||||||
|
"start": "next start"
|
||||||
|
}
|
||||||
|
}
|
19
examples/with-graphql-react/pages/_app.js
Normal file
19
examples/with-graphql-react/pages/_app.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import 'cross-fetch/polyfill'
|
||||||
|
import { Provider } from 'graphql-react'
|
||||||
|
import { withGraphQL } from 'next-graphql-react'
|
||||||
|
import App, { Container } from 'next/app'
|
||||||
|
|
||||||
|
class CustomApp extends App {
|
||||||
|
render () {
|
||||||
|
const { Component, pageProps, graphql } = this.props
|
||||||
|
return (
|
||||||
|
<Container>
|
||||||
|
<Provider value={graphql}>
|
||||||
|
<Component {...pageProps} />
|
||||||
|
</Provider>
|
||||||
|
</Container>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default withGraphQL(CustomApp)
|
31
examples/with-graphql-react/pages/index.js
Normal file
31
examples/with-graphql-react/pages/index.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import { Query } from 'graphql-react'
|
||||||
|
|
||||||
|
export default () => (
|
||||||
|
<Query
|
||||||
|
loadOnMount
|
||||||
|
loadOnReset
|
||||||
|
fetchOptionsOverride={options => {
|
||||||
|
options.url = 'https://graphql-pokemon.now.sh'
|
||||||
|
}}
|
||||||
|
operation={{
|
||||||
|
query: /* GraphQL */ `
|
||||||
|
{
|
||||||
|
pokemon(name: "Pikachu") {
|
||||||
|
name
|
||||||
|
image
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ data, loading }) =>
|
||||||
|
data ? (
|
||||||
|
<img src={data.pokemon.image} alt={data.pokemon.name} />
|
||||||
|
) : loading ? (
|
||||||
|
<p>Loading…</p>
|
||||||
|
) : (
|
||||||
|
<p>Error!</p>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</Query>
|
||||||
|
)
|
Loading…
Reference in a new issue