React.js 0.13 - 警告:某些东西正在直接调用 React 组件。改用工厂或 JSX
React.js 0.13 - Warning: Something is calling a React component directly. Use a factory or JSX instead
运行 服务器端下面的代码,我得到
"Warning: Something is calling a React component directly. Use a
factory or JSX instead."
但是我是在server.js(不使用JSX时)和components 我正在使用 JSX。那么问题是什么?
好的,然后我尝试在父组件中使用工厂(将var Child = require('./Child');
更改为var Child = React.createFactory(require('./Child'));
在这种情况下,服务器工作正常,但客户端不工作:
instantiateReactComponent.js:43 Uncaught TypeError: Cannot read property 'mountComponent' of undefined
那么我怎样才能在服务器和客户端上都做到 运行 呢?
components/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
components/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'));
您使用的是哪个版本的 node-jsx? JSX 曾经将 <ComponentClass />
编译为 ComponentClass()
,所以这可能就是这里发生的事情。
尝试使用 require('babel/register')
挂钩更新 node-jsx 或 move to babel。
运行 服务器端下面的代码,我得到
"Warning: Something is calling a React component directly. Use a factory or JSX instead."
但是我是在server.js(不使用JSX时)和components 我正在使用 JSX。那么问题是什么?
好的,然后我尝试在父组件中使用工厂(将var Child = require('./Child');
更改为var Child = React.createFactory(require('./Child'));
在这种情况下,服务器工作正常,但客户端不工作:
instantiateReactComponent.js:43 Uncaught TypeError: Cannot read property 'mountComponent' of undefined
那么我怎样才能在服务器和客户端上都做到 运行 呢?
components/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
components/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'));
您使用的是哪个版本的 node-jsx? JSX 曾经将 <ComponentClass />
编译为 ComponentClass()
,所以这可能就是这里发生的事情。
尝试使用 require('babel/register')
挂钩更新 node-jsx 或 move to babel。