2

我正在尝试在服务器上渲染一个非常简单的 React 组件:

/** @jsx dom */
var React = require("react");

var Title = React.createClass({
  render: function(){
    return(<h1>Hello World</h1>) 
  }
});

module.exports = React.createFactory(Title);

当我调用 ReactDOMServer.renderToString (Component) 我得到Error: Invariant Violation: renderToString(): You must pass a valid ReactElement.

如果我改为使用 React.createElement (Title),我会得到

return(dom.h1(null, "Hello World")) 
           ^
ReferenceError: dom is not defined

路由文件:

var express = require('express'),
    router = express.Router(),
    React = require("react")
    ReactDOMServer = require("react-dom/server");  
    JSX = require('node-jsx').install({
      extension: '.jsx'
    }),
    AssessmentComponent = require("../react/components/title.react.jsx");

我不知道为什么这不起作用!

4

1 回答 1

0

所以我犯了一些错误。以下解决方案:

a)在需要组件时使用 babel/register 意味着可以在没有任何 faff 的情况下即时完成转译;)

b) dom 被 Babel 的 @jsx dom 语法插入。现在使用 babel/register 就不需要了。

c) 不建议使用 createFactory 导出组件,因为该组件的其他用户可能希望在其上调用 createElement。

d) 我在路由文件上调用了 createFactory,但它似乎返回了一个需要调用的函数。-ReactDOMServer.renderToString(Component())

于 2015-10-25T14:10:18.687 回答