简体   繁体   English

如何通过道具服务器端反应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM