1

运行服务器端下面的代码,我得到

“警告:有些东西正在直接调用 React 组件。请改用工厂或 JSX。”

但是我server.js中使用了一个工厂(当不使用 JSX 时),并且在我使用 JSX的组件中。所以有什么问题?

好的,然后我尝试在父组件中使用工厂(更改var Child = require('./Child');var Child = React.createFactory(require('./Child')); 在这种情况下服务器工作正常,但客户端不:

instantiateReactComponent.js:43 Uncaught TypeError: Cannot read property 'mountComponent' of undefined

那么如何让它在服务器和客户端上运行呢?

组件/Parent.js:

/** @jsx React.DOM */

var React = require('react');
var Child = require('./Child');

var Parent = React.createClass({
    render: function() {
        return (
            <div className="a-child">
                <Child />
            </div>
        )
    }
});

module.exports = Parent

组件/Child.js:

/** @jsx React.DOM */

var React = require('react');

var Child = React.createClass({
    render: function() {
        return (
            <span>I'm a Child!</span>
        )
    }
});

module.exports = Child;

server.js:

var JSX = require('node-jsx').install();
var React = require('react');
var Parent = React.createFactory(require('./components/Parent'));
...
var markup = React.renderToString(Parent());
...

客户端.js:

var React = require('react');
var Parent = require('./components/Parent');
...
React.render(<Parent />, document.getElementById('app'));
4

1 回答 1

2

您使用的是什么版本的 node-jsx?JSX 曾经编译<ComponentClass />ComponentClass(),所以这可能就是这里发生的事情。

尝试更新 node-jsx 或使用钩子移动到 babelrequire('babel/register')

于 2015-03-25T20:51:23.290 回答