Skip to content
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 using Fela #863

Merged
merged 5 commits into from
Jan 23, 2017
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 yo 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).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: how to insteado of how yo

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I basically copied the README from the styletron example 😅


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