Skip to content

Commit

Permalink
Example using Fela (#863)
Browse files Browse the repository at this point in the history
* added example using fela

* update package-json

* removed nested routing test

* fixed linting issues

* fixed typo
  • Loading branch information
Robin Frischmann authored and impronunciable committed Jan 23, 2017
1 parent 2390c87 commit 8d8d5eb
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 0 deletions.
30 changes: 30 additions & 0 deletions examples/with-fela/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

# Example app with Fela

## 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/with-fela
cd with-fela
```

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

This example features how to 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 [fela](https://github.com/rofrischmann/fela).

For this purpose we are extending the `<Document />` and injecting the server side rendered styles into the `<head>`.
16 changes: 16 additions & 0 deletions examples/with-fela/fela.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { createRenderer } from 'fela'

// add your renderer configuration here
const renderer = createRenderer()

export function getRenderer () {
return renderer
}

export function getMountNode () {
if (typeof window !== 'undefined') {
return document.getElementById('fela-stylesheet')
}

return undefined
}
8 changes: 8 additions & 0 deletions examples/with-fela/layout.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Provider } from 'react-fela'
import { getRenderer, getMountNode } from './fela'

export default ({ children }) => (
<Provider renderer={getRenderer()} mountNode={getMountNode()}>
{children}
</Provider>
)
14 changes: 14 additions & 0 deletions examples/with-fela/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "with-fela",
"version": "1.0.0",
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
},
"dependencies": {
"fela": "^4.1.2",
"next": "^2.0.0-beta",
"react-fela": "^4.1.2"
}
}
32 changes: 32 additions & 0 deletions examples/with-fela/pages/_document.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Document, { Head, Main, NextScript } from 'next/document'
import { getRenderer } from '../fela'

export default class MyDocument extends Document {
static getInitialProps ({ renderPage }) {
const page = renderPage()
const renderer = getRenderer()
const css = renderer.renderToString()

renderer.clear()

return {
...page,
css
}
}

render () {
return (
<html>
<Head>
<title>My page</title>
<style id='fela-stylesheet'>{this.props.css}</style>
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
15 changes: 15 additions & 0 deletions examples/with-fela/pages/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { createComponent } from 'react-fela'
import Page from '../layout'

const title = ({ size }) => ({
fontSize: size + 'px',
color: 'red'
})

const Title = createComponent(title, 'h1')

export default () => (
<Page>
<Title size={50}>My Title</Title>
</Page>
)

0 comments on commit 8d8d5eb

Please sign in to comment.