我尝试使用node.js和reactjs作为我的php后端的模板渲染服务。这是guideline。
我想知道bundle.js
构建的browserify
是否存在问题。我在客户端获得Uncaught ReferenceError: ItemPage is not defined
,因为ItemPage
中的组件bundle.js
不是全局的,但我不知道如何访问它,因为它包含在某些函数中我真的不明白。
这是我的es6组件脚本:
import React from 'react';
import Tabs from 'grommet/components/Tabs';
import Tab from 'grommet/components/Tab';
class ItemPage extends React.Component {
render(){
return <Tabs onClick={this._onClick.bind(this)}>
<Tab title="First Title">
<h3>First Tab</h3>
<p>Contents of the first tab !</p>
<div>Something@@@@@@</div>
</Tab>
<Tab title="Second Title">
<h3>Second Tab</h3>
<p>Contents of the second tab</p>
</Tab>
<Tab title="Third Title">
<h3>Third Tab</h3>
<p>Contents of the third tab</p>
</Tab>
</Tabs>
}
_onClick(){
alert("raging")
}
}
我用来捆绑脚本的命令:
browserify src/ItemPage.js -o /js/build/ItemPage.js -t [ babelify --presets [ es2015 react ] ]
输出:
echo '<div id="app">';
// reactjs markup content sent back from node.js
echo $content;
echo '</div>';
echo '<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js"></script>';
echo '<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js"></script>';
echo '<script type="text/javascript" src="/js/build/ItemPage.js"></script>';
echo '<script>
var container = document.getElementById("app");
var component = ItemPage;
// Error!!!!
React.renderComponent(component, container);
</script>';
错误:
Uncaught ReferenceError: ItemPage is not defined
这是我的捆绑文件(2mb):
https://drive.google.com/file/d/0B1XYujDUsAgtb3NrSlBFQ19qckU/view?pref=2&pli=1
您可以看到ItemPage在脚本中不是全局的。
更新
我已将default export
添加到文件中:
import React from 'react';
import Tabs from 'grommet/components/Tabs';
import Tab from 'grommet/components/Tab';
class ItemPage extends React.Component {
render(){
return <Tabs onClick={this._onClick.bind(this)}>
<Tab title="First Title">
<h3>First Tab</h3>
<p>Contents of the first tab !</p>
<div>Something@@@@@@</div>
</Tab>
<Tab title="Second Title">
<h3>Second Tab</h3>
<p>Contents of the second tab</p>
</Tab>
<Tab title="Third Title">
<h3>Third Tab</h3>
<p>Contents of the third tab</p>
</Tab>
</Tabs>
}
_onClick(){
alert("raging")
}
}
export default ItemPage;
但是,ItemPage仍然是本地的,在客户端无法访问。
这是我的最新版本:
https://drive.google.com/file/d/0B1XYujDUsAgtZjNvaFdBUVlzU2s/view?usp=sharing
答案 0 :(得分:2)
除了添加导出之外,您还需要说browserify通过添加--standalone
标志来生成UMD输出。
- standalone -s为提供的导出名称生成UMD包。 此捆绑包与其他模块系统一起使用并设置名称 如果没有找到模块系统,则作为全局窗口给出。
browserify src/ItemPage.js
-o /js/build/ItemPage.js
--standalone ItemPage
-t [ babelify --presets [ es2015 react ] ]
为了便于阅读,多行
答案 1 :(得分:1)
您需要在脚本中导出ItemPage
export default ItemPage