mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
* #3757 update Fela for Next 5 closes #3757 * add missing props passdown
This commit is contained in:
parent
359e25af13
commit
6f0914c788
26
examples/with-fela/FelaProvider.js
Executable file
26
examples/with-fela/FelaProvider.js
Executable file
|
@ -0,0 +1,26 @@
|
|||
import { Component } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
import { Provider } from 'react-fela'
|
||||
import getFelaRenderer from './getFelaRenderer'
|
||||
|
||||
const clientRenderer = getFelaRenderer()
|
||||
|
||||
export default class FelaProvider extends Component {
|
||||
static contextTypes = {
|
||||
renderer: PropTypes.object
|
||||
};
|
||||
|
||||
render () {
|
||||
if (this.context.renderer) {
|
||||
return this.props.children
|
||||
}
|
||||
|
||||
const renderer = this.props.renderer || clientRenderer
|
||||
return (
|
||||
<Provider renderer={renderer}>
|
||||
{this.props.children}
|
||||
</Provider>
|
||||
)
|
||||
}
|
||||
}
|
0
examples/with-fela/README.md
Normal file → Executable file
0
examples/with-fela/README.md
Normal file → Executable file
|
@ -1,8 +0,0 @@
|
|||
import { createRenderer } from 'fela'
|
||||
import webPreset from 'fela-preset-web'
|
||||
|
||||
const felaRenderer = createRenderer({
|
||||
plugins: [...webPreset]
|
||||
})
|
||||
|
||||
export default felaRenderer
|
10
examples/with-fela/getFelaRenderer.js
Normal file
10
examples/with-fela/getFelaRenderer.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import { createRenderer } from 'fela'
|
||||
import webPreset from 'fela-preset-web'
|
||||
|
||||
export default function getRenderer () {
|
||||
return createRenderer({
|
||||
plugins: [
|
||||
...webPreset
|
||||
]
|
||||
})
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
import { Provider } from 'react-fela'
|
||||
import felaRenderer from './fela-renderer'
|
||||
|
||||
export default ({ children }) =>
|
||||
<Provider renderer={felaRenderer}>
|
||||
{children}
|
||||
</Provider>
|
8
examples/with-fela/package.json
Normal file → Executable file
8
examples/with-fela/package.json
Normal file → Executable file
|
@ -7,12 +7,12 @@
|
|||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"fela": "^5.0.1",
|
||||
"fela-dom": "5.0.2",
|
||||
"fela-preset-web": "^5.0.2",
|
||||
"fela": "^6.1.4",
|
||||
"fela-dom": "^7.0.5",
|
||||
"fela-preset-web": "^8.0.4",
|
||||
"next": "latest",
|
||||
"react": "^16.0.0",
|
||||
"react-dom": "^16.0.0",
|
||||
"react-fela": "^5.0.2"
|
||||
"react-fela": "^7.0.1"
|
||||
}
|
||||
}
|
||||
|
|
34
examples/with-fela/pages/_document.js
Normal file → Executable file
34
examples/with-fela/pages/_document.js
Normal file → Executable file
|
@ -1,12 +1,20 @@
|
|||
import Document, { Head, Main, NextScript } from 'next/document'
|
||||
import { renderToSheetList } from 'fela-dom'
|
||||
import felaRenderer from '../fela-renderer'
|
||||
|
||||
import FelaProvider from '../FelaProvider'
|
||||
import getFelaRenderer from '../getFelaRenderer'
|
||||
|
||||
export default class MyDocument extends Document {
|
||||
static getInitialProps ({ renderPage }) {
|
||||
const page = renderPage()
|
||||
const sheetList = renderToSheetList(felaRenderer)
|
||||
felaRenderer.clear()
|
||||
const serverRenderer = getFelaRenderer()
|
||||
|
||||
const page = renderPage(App => props => (
|
||||
<FelaProvider renderer={serverRenderer}>
|
||||
<App {...props} />
|
||||
</FelaProvider>
|
||||
))
|
||||
|
||||
const sheetList = renderToSheetList(serverRenderer)
|
||||
|
||||
return {
|
||||
...page,
|
||||
|
@ -15,13 +23,17 @@ export default class MyDocument extends Document {
|
|||
}
|
||||
|
||||
render () {
|
||||
const styleNodes = this.props.sheetList.map(({ type, media, css }) =>
|
||||
<style
|
||||
dangerouslySetInnerHTML={{ __html: css }}
|
||||
data-fela-type={type}
|
||||
key={`${type}-${media}`}
|
||||
media={media}
|
||||
/>,
|
||||
const styleNodes = this.props.sheetList.map(
|
||||
({ type, rehydration, support, media, css }) => (
|
||||
<style
|
||||
dangerouslySetInnerHTML={{ __html: css }}
|
||||
data-fela-rehydration={rehydration}
|
||||
data-fela-support={support}
|
||||
data-fela-type={type}
|
||||
key={`${type}-${media}`}
|
||||
media={media}
|
||||
/>
|
||||
)
|
||||
)
|
||||
|
||||
return (
|
||||
|
|
12
examples/with-fela/pages/index.js
Normal file → Executable file
12
examples/with-fela/pages/index.js
Normal file → Executable file
|
@ -1,5 +1,6 @@
|
|||
import { createComponent } from 'react-fela'
|
||||
import Page from '../layout'
|
||||
|
||||
import FelaProvider from '../FelaProvider'
|
||||
|
||||
const Container = createComponent(() => ({
|
||||
maxWidth: 700,
|
||||
|
@ -20,13 +21,14 @@ const Title = createComponent(
|
|||
fontSize: size,
|
||||
color: '#555'
|
||||
}),
|
||||
Text,
|
||||
Text
|
||||
)
|
||||
|
||||
export default () =>
|
||||
<Page>
|
||||
export default () => (
|
||||
<FelaProvider>
|
||||
<Container>
|
||||
<Title size={50}>My Title</Title>
|
||||
<Text>Hi, I am Fela.</Text>
|
||||
</Container>
|
||||
</Page>
|
||||
</FelaProvider>
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue