React.js 0.13 - 警告:有些东西直接调用React组件。请改用工厂或JSX

时间:2015-03-25 20:41:19

标签: reactjs isomorphic-javascript

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

  

"警告:有些东西直接调用了React组件。用一个   而不是工厂或JSX。"

但我使用 server.js 中的工厂(不使用JSX时),以及组件中的工厂使用JSX。那么问题是什么?

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

  

instantiateReactComponent.js:43未捕获的TypeError:无法读取属性' mountComponent'未定义的

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

部件/ 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());
...

client.js:

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

1 个答案:

答案 0 :(得分:2)

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

尝试使用require('babel/register')挂钩更新node-jsx或move to babel