1
0
Fork 0
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:
Sahal Sajjad 2018-08-09 10:06:34 +05:30 committed by Tim Neutkens
parent 06b02e2c62
commit 136585e296
4 changed files with 100 additions and 0 deletions

View 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.

View 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"
}

View 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>
)
}
}

View 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!' />