rsnext/examples/with-react-relay-network-modern/pages/_app.js
Ting-Hsiang Hsu 21d5aebd53 feat(example): add react-relay-network-modern example (#5349)
In this example, we can:
- `QueryRenderer` SSR
- caching the data
- use the feature of `react-relay-network-modern` which is the powerful tool for `relay-modern`

I copy the example `with-relay-modern`, but I just modified the code. Some detail are not modified.
If you think this example is needed, I will fix those. Otherwise, close this **PR** to let me know this example is not needed.
2018-11-25 15:14:36 +01:00

59 lines
1.4 KiB
JavaScript

import React from 'react'
import { QueryRenderer, fetchQuery } from 'react-relay'
import NextApp, { Container } from 'next/app'
import {
initEnvironment,
createEnvironment
} from '../lib/createEnvironment'
export default class App extends NextApp {
static getInitialProps = async ({ Component, router, ctx }) => {
const { variables } = Component.getInitialProps ? await Component.getInitialProps(ctx) : {}
try {
if (initEnvironment) {
const { environment, relaySSR } = initEnvironment()
await fetchQuery(environment, Component.query, variables)
return {
variables,
relayData: await relaySSR.getCache()
}
}
} catch (e) {
console.log(e)
}
return {
variables
}
};
render () {
const { Component, variables = {}, relayData } = this.props
const environment = createEnvironment(
relayData,
JSON.stringify({
queryID: Component.query ? Component.query().name : undefined,
variables
})
)
return (
<Container>
<QueryRenderer
environment={environment}
query={Component.query}
variables={variables}
render={({ error, props }) => {
if (error) return <div>{error.message}</div>
else if (props) return <Component {...props} />
return <div>Loading</div>
}}
/>
</Container>
)
}
}