1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00

[example] Progressive rendered application (#998)

* [add] example of a progressive rendered app

* [update] remove extra blank line

* [update] fix typo

* [update] more use cases

* [update] example link

* Update README.md

* [update] next.js dependency version

* [update] fix readme typos
This commit is contained in:
Sergio Daniel Xalambrí 2017-02-05 07:43:28 -05:00 committed by Tim Neutkens
parent 267b74b256
commit 592c666e82
4 changed files with 93 additions and 0 deletions

View file

@ -0,0 +1,36 @@
# Example app implementing progressive server-side render
## How to use
Download the example [or clone the repo](https://github.com/zeit/next.js):
```bash
curl https://codeload.github.com/zeit/next.js/tar.gz/master | tar -xz --strip=2 next.js-master/examples/progressive-render
cd progressive-render
```
Install it and run:
```bash
npm install
npm run dev
```
Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download))
```bash
now
```
## The idea behind the example
Sometimes you want to **not** server render some parts of your application. That can be third party components without server render capabilities, components that depends on `window` and other browser only APIs or just because that content isn't important enough for the user (eg. below the fold content).
In that case you can wrap the component in `react-no-ssr` which will only render the component client-side.
This example features:
* An app with a component that must only be rendered in the client
* A loading component that will be displayed before rendering the client-only component
**Example**: https://progressive-render-raceuevkqw.now.sh/

View file

@ -0,0 +1,15 @@
import React from 'react'
export default () => (
<div>
<h3>Loading...</h3>
<style jsx>{`
div {
align-items: center;
display: flex;
height: 50vh;
justify-content: center;
}
`}</style>
</div>
)

View file

@ -0,0 +1,12 @@
{
"name": "progressive-render",
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
},
"dependencies": {
"next": "latest",
"react-no-ssr": "1.1.0"
}
}

View file

@ -0,0 +1,30 @@
import React from 'react'
import NoSSR from 'react-no-ssr'
import Loading from '../components/Loading'
export default () => (
<main>
<section>
<h1>
This section is server-side rendered.
</h1>
</section>
<NoSSR onSSR={<Loading />}>
<section>
<h2>
This section is <em>only</em> client-side rendered.
</h2>
</section>
</NoSSR>
<style jsx>{`
section {
align-items: center;
display: flex;
height: 50vh;
justify-content: center;
}
`}</style>
</main>
)