在服务器端下面运行代码,我得到了
"警告:有些东西直接调用了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'));
答案 0 :(得分:2)
您使用的是什么版本的node-jsx? JSX用于将<ComponentClass />
编译为ComponentClass()
,这可能是这里发生的事情。
尝试使用require('babel/register')
挂钩更新node-jsx或move to babel。