mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Added example: with-typestyle (#4926)
* Added example: with-typestyle * Fixed bug: Rendering the DOM tree twice
This commit is contained in:
parent
06b02e2c62
commit
136585e296
46
examples/with-typestyle/README.md
Normal file
46
examples/with-typestyle/README.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
[![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-typestyle)
|
||||
|
||||
# Example app with typestyle
|
||||
|
||||
## How to use
|
||||
|
||||
### Using `create-next-app`
|
||||
|
||||
Execute [`create-next-app`](https://github.com/segmentio/create-next-app) with [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) or [npx](https://github.com/zkat/npx#readme) to bootstrap the example:
|
||||
|
||||
```bash
|
||||
npx create-next-app --example with-typestyle with-typestyle-app
|
||||
# or
|
||||
yarn create next-app --example with-typestyle with-typestyle-app
|
||||
```
|
||||
|
||||
### Download manually
|
||||
|
||||
Download the example:
|
||||
|
||||
```bash
|
||||
curl https://codeload.github.com/zeit/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/with-typestyle
|
||||
cd with-typestyle
|
||||
```
|
||||
|
||||
Install it and run:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
# or
|
||||
yarn
|
||||
yarn dev
|
||||
```
|
||||
|
||||
Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download))
|
||||
|
||||
```bash
|
||||
now
|
||||
```
|
||||
|
||||
## The idea behind the example
|
||||
|
||||
This example features how you use a different styling solution than [styled-jsx](https://github.com/zeit/styled-jsx) that also supports universal styles. That means we can serve the required styles for the first render within the HTML and then load the rest in the client. In this case we are using [typestyle](https://github.com/typestyle/typestyle).
|
||||
|
||||
For this purpose we are extending the `<Document />` and injecting the server side rendered styles into the `<head>`. Refer to [with-typescript](https://github.com/zeit/next.js/tree/master/examples/with-typescript) to use this with typescript.
|
16
examples/with-typestyle/package.json
Normal file
16
examples/with-typestyle/package.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "with-typestyle",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dev": "next",
|
||||
"build": "next build",
|
||||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"next": "latest",
|
||||
"react": "^16.0.0",
|
||||
"react-dom": "^16.0.0",
|
||||
"typestyle": "^2.0.1"
|
||||
},
|
||||
"license": "ISC"
|
||||
}
|
27
examples/with-typestyle/pages/_document.js
Normal file
27
examples/with-typestyle/pages/_document.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import Document, { Head, Main, NextScript } from 'next/document'
|
||||
import {getStyles} from 'typestyle'
|
||||
|
||||
export default class MyDocument extends Document {
|
||||
static getInitialProps ({ renderPage }) {
|
||||
const page = renderPage()
|
||||
const styleTags = getStyles()
|
||||
return { ...page, styleTags }
|
||||
}
|
||||
|
||||
render () {
|
||||
return (
|
||||
<html>
|
||||
<Head>
|
||||
<title>My page</title>
|
||||
<style id='styles-target'>
|
||||
{this.props.styleTags}
|
||||
</style>
|
||||
</Head>
|
||||
<body>
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
}
|
||||
}
|
11
examples/with-typestyle/pages/index.js
Normal file
11
examples/with-typestyle/pages/index.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
import React from 'react'
|
||||
import { style } from 'typestyle'
|
||||
|
||||
const className = style({color: 'red'})
|
||||
const RedText = ({text}) => (
|
||||
<div className={className}>
|
||||
{text}
|
||||
</div>
|
||||
)
|
||||
|
||||
export default () => <RedText text='Hello Next.js!' />
|
Loading…
Reference in a new issue