From 3811066316d7a8d939edd00c9b238d9ceb72babf Mon Sep 17 00:00:00 2001 From: Sahal Sajjad Date: Thu, 9 Aug 2018 08:34:44 +0530 Subject: [PATCH 1/2] Added example: with-typestyle --- examples/with-typestyle/README.md | 46 ++++++++++++++++++++++ examples/with-typestyle/package.json | 16 ++++++++ examples/with-typestyle/pages/_document.js | 28 +++++++++++++ examples/with-typestyle/pages/index.js | 11 ++++++ 4 files changed, 101 insertions(+) create mode 100644 examples/with-typestyle/README.md create mode 100644 examples/with-typestyle/package.json create mode 100644 examples/with-typestyle/pages/_document.js create mode 100644 examples/with-typestyle/pages/index.js diff --git a/examples/with-typestyle/README.md b/examples/with-typestyle/README.md new file mode 100644 index 0000000000000..dbceec98b955b --- /dev/null +++ b/examples/with-typestyle/README.md @@ -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 `` and injecting the server side rendered styles into the ``. Refer to [with-typescript](https://github.com/zeit/next.js/tree/master/examples/with-typescript) to use this with typescript. diff --git a/examples/with-typestyle/package.json b/examples/with-typestyle/package.json new file mode 100644 index 0000000000000..d331515c937cb --- /dev/null +++ b/examples/with-typestyle/package.json @@ -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" +} diff --git a/examples/with-typestyle/pages/_document.js b/examples/with-typestyle/pages/_document.js new file mode 100644 index 0000000000000..970ff3febf781 --- /dev/null +++ b/examples/with-typestyle/pages/_document.js @@ -0,0 +1,28 @@ +import Document, { Head, Main, NextScript } from 'next/document' +import {getStyles} from 'typestyle' +import ReactDOMServer from 'react-dom/server' + +export default class MyDocument extends Document { + static getInitialProps ({ renderPage }) { + const page = renderPage(App => props => ReactDOMServer.renderToString()) + const styleTags = getStyles() + return { ...page, styleTags } + } + + render () { + return ( + + + My page + + + +
+ + + + ) + } +} diff --git a/examples/with-typestyle/pages/index.js b/examples/with-typestyle/pages/index.js new file mode 100644 index 0000000000000..e82aa9e097458 --- /dev/null +++ b/examples/with-typestyle/pages/index.js @@ -0,0 +1,11 @@ +import React from 'react' +import { style } from 'typestyle' + +const className = style({color: 'red'}) +const RedText = ({text}) => ( +
+ {text} +
+) + +export default () => From eb518c6676ff63f7939077e9f5b3bdb8cb9ff86c Mon Sep 17 00:00:00 2001 From: Sahal Sajjad Date: Thu, 9 Aug 2018 09:25:02 +0530 Subject: [PATCH 2/2] Fixed bug: Rendering the DOM tree twice --- examples/with-typestyle/pages/_document.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/with-typestyle/pages/_document.js b/examples/with-typestyle/pages/_document.js index 970ff3febf781..5c38857288359 100644 --- a/examples/with-typestyle/pages/_document.js +++ b/examples/with-typestyle/pages/_document.js @@ -1,10 +1,9 @@ import Document, { Head, Main, NextScript } from 'next/document' import {getStyles} from 'typestyle' -import ReactDOMServer from 'react-dom/server' export default class MyDocument extends Document { static getInitialProps ({ renderPage }) { - const page = renderPage(App => props => ReactDOMServer.renderToString()) + const page = renderPage() const styleTags = getStyles() return { ...page, styleTags } }