[英]how to pass prop server side react
I am using node js to render my react component... 我正在使用节点js渲染我的react组件...
var express = require('express');
var router = express.Router();
var React = require('react');
var reactDom = require('react-dom/server');
var App = React.createFactory(require('../components/index'));
router.get('/', function(req,res) {
var reactHtml = reactDom.renderToString(App({exists: false}));
res.render('../../tutorHub/views/index.jade', {reactOutput: reactHtml});
});
module.exports = router;
I am trying to pass a prop, exists: false
, to the component. 我正在尝试将一个exists: false
的道具( exists: false
)传递给组件。
But in my actual component when I try to console.log
... 但是在我尝试console.log
实际组件中时...
render(){
console.log(this.props.exists);
return (
<Register />
);
}
I get undefined
rather than true
. 我得到的是undefined
而不是true
。
How can I fix this? 我怎样才能解决这个问题? Is this because the browser is re-rendering the page? 这是因为浏览器正在重新渲染页面吗?
The reason is on your client-side, React will render your App
component one more time. 原因是在客户端,React将使您的App
组件再渲染一次。 This time, React will re-render which components are different from server-rendered components. 这次,React将重新渲染哪些组件与服务器渲染的组件不同。 It will refresh your props.exists
to undefined
because you don't pass anything to App
component in your client-side code. 它将把props.exists
刷新为undefined
因为您没有在客户端代码中将任何内容传递给App
组件。 There are some techniques to solve it. 有一些解决方法。 One way is that in your client-side code, you request exists
from the server and pass it to your App
component before rendering your application. 一种方法是,在您的客户端代码,你要求exists
从服务器,并把它传递给你的App
呈现应用程序之前组件。
I created a very simple app based on your code and am able to see the exists
prop set correctly in the render method. 我根据您的代码创建了一个非常简单的应用程序,并且能够在render方法中正确看到exists
道具集。 Given that this self-contained version works, I wonder if the issue lies somehow within the code of ../components/index
. 鉴于此独立版本有效,我想知道问题是否在../components/index
的代码内。
'use strict';
var express = require('express');
var router = express.Router();
var React = require('react');
var reactDom = require('react-dom/server');
var App = React.createFactory(class extends React.Component {
render () {
console.log(this.props);
return React.createElement('div');
}
});
router.get('/', function(req,res) {
var reactHtml = reactDom.renderToString(App({exists: false}));
res.send(reactHtml);
});
var app = express();
app.use('/', router);
app.listen(3000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.