2014-03-19 36 views
7

我正在考虑在新网站中使用反应,我还在想,如何处理具有反应组件的全局命名空间。例如,如果我定义的几个反应的组分是这样的:JS:反应和全局命名空间污染

var MySlider = React.createClass({ // snip }); 
var MyAlert = React.createClass({ // snip }); 
var MyDropdown = React.createClass({ // snip }); 

渲染的成分应该是这样的:

React.renderComponent(
    <MySlider />, 
    document.getElementById('content') 
); 

不过,我宁愿我的命名空间的组件,以避免污染全局命名空间。

var Namespace = {}; 
Namespace.MySlider = React.createClass({ // snip }); 

当涉及到渲染,由于命名空间,我猜没有找到组件。

React.renderComponent(
    <Namespace.MySlider />, // component is not found 
    document.getElementById('content') 
); 

我在这里错过了什么?只是忽略全球命名空间污染?或者是否有可能命名空间您的组件?

谢谢!

+1

现在,语法不起作用,但可能在将来。 ssorallen的回答是正确的;建议使用模块系统。 –

+0

正如@BenAlpert之前提到的,[React 0.11中添加了[JSX命名空间](https://facebook.github.io/react/blog/2014/07/17/react-v0.11.html#jsx-namespacing) 0.0。仍然建议使用模块加载器,但现在可以使用名称空间,就像您希望在您的示例中使用的那样。 –

回答

9

这不完全是一个React JS问题,因为任何大型JavaScript代码库都必须处理模块加载。我建议以JavaScript开始接近它的方式放弃命名空间,而是使用模块加载器。

你会得到这么多的意见,但看看看一些广泛使用的模块装载机:

+0

感谢您的解释!我一定会看看。 – algi

6

这段代码工作。

React.renderComponent(
    Namespace.MySlider(), 
    document.getElementById('content') 
); 

查看documentation了解更多信息。