Skip to content

Commit 5fdd453

Browse files
committedJun 2, 2017
fetches data before rendering component on server
1 parent 525c625 commit 5fdd453

File tree

3 files changed

+23
-21
lines changed

3 files changed

+23
-21
lines changed
 

‎hello.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
11
import React from 'react';
22
import Butter from 'buttercms'
3+
import Transmit from 'react-transmit';
34

45
const butter = Butter('b60a008584313ed21803780bc9208557b3b49fbb');
56

67
var Hello = React.createClass({
7-
getInitialState: function() {
8-
return {loaded: false};
9-
},
10-
componentWillMount: function() {
11-
butter.post.list().then((resp) => {
12-
this.setState({
13-
loaded: true,
14-
resp: resp.data
15-
})
16-
});
17-
},
188
render: function() {
19-
if (this.state.loaded) {
9+
if (this.props.posts) {
2010
return (
2111
<div>
22-
{this.state.resp.data.map((post) => {
12+
{this.props.posts.data.map((post) => {
2313
return (
2414
<div key={post.slug}>{post.title}</div>
2515
)
@@ -32,4 +22,13 @@ var Hello = React.createClass({
3222
}
3323
});
3424

35-
export default Hello;
25+
export default Transmit.createContainer(Hello, {
26+
// These must be set or else it would fail to render
27+
initialVariables: {},
28+
// Each fragment will be resolved into a prop
29+
fragments: {
30+
posts() {
31+
return butter.post.list().then((resp) => resp.data);
32+
}
33+
}
34+
});

‎package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"express": "^4.15.3",
1212
"path": "^0.12.7",
1313
"react": "^0.14.8",
14-
"react-dom": "^0.14.8"
14+
"react-dom": "^0.14.8",
15+
"react-transmit": "^3.2.0"
1516
},
1617
"devDependencies": {
1718
"webpack": "^1.12.14",

‎server.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@ import path from 'path';
44
import React from 'react';
55
import ReactDOMServer from 'react-dom/server';
66
import Hello from './Hello.js';
7+
import Transmit from 'react-transmit';
78

89
function handleRender(req, res) {
9-
const html = ReactDOMServer.renderToString(<Hello />);
10+
Transmit.renderToString(Hello).then(({reactString, reactData}) => {
11+
fs.readFile('./index.html', 'utf8', function (err, data) {
12+
if (err) throw err;
1013

11-
fs.readFile('./index.html', 'utf8', function (err, data) {
12-
if (err) throw err;
14+
const document = data.replace(/<div id="app"><\/div>/, `<div id="app">${reactString}</div>`);
15+
const output = Transmit.injectIntoMarkup(document, reactData, ['/build/client.js']);
1316

14-
const document = data.replace(/<div id="app"><\/div>/, `<div id="app">${html}</div>`);
15-
16-
res.send(document);
17+
res.send(document);
18+
});
1719
});
1820
}
1921

0 commit comments

Comments
 (0)
Please sign in to comment.