-
Notifications
You must be signed in to change notification settings - Fork 27k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[example] Progressive rendered application #998
Changes from 2 commits
3ced357
f1d5fef
5b87296
8fe15fa
cf5cbd4
8a17304
6910386
a783cbf
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# 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 | ||
|
||
Some times you want to **not** server render some parts of your application. That can be third party components without server render compatibility or just because that content isn't enough important for the user (eg. below the fold content). | ||
|
||
In that cases you can use `react-no-ssr` to wrap that client-only components and avoid server rendering it at all and then do the render in the client after the application has loaded. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe change it to something like this: In that case you can wrap the component in 'react-no-ssr' which will only render the component client-side. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sergiodxa saw I reviewed this right before you pushed commits. So it's not outdated 😄 Edit: I'll add a new review ❤️ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe change it to something like this: 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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"name": "progressive-render", | ||
"scripts": { | ||
"dev": "next", | ||
"build": "next build", | ||
"start": "next start" | ||
}, | ||
"dependencies": { | ||
"next": "^2.0.0-beta", | ||
"react-no-ssr": "1.1.0" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe use "latest" here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually, |
||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sometimes
Maybe mention components with a dependency on
window
because that has been asked multiple times on slack.