Javascript React.js:在仍然使用JSX引用子组件时,是否可以为其命名名称空间?
假设我有一个名为Javascript React.js:在仍然使用JSX引用子组件时,是否可以为其命名名称空间?,javascript,reactjs,react-jsx,Javascript,Reactjs,React Jsx,假设我有一个名为ImageGrid的组件,它的定义如下: window.ImageGrid = React.createClass({ render: function() { return ( <div className="image-grid"> <ImageGridItem /> </div> ); } }); 只要这两个属
ImageGrid
的组件,它的定义如下:
window.ImageGrid = React.createClass({
render: function() {
return (
<div className="image-grid">
<ImageGridItem />
</div>
);
}
});
只要这两个属性都是窗口的直接属性
,就可以正常工作。但是这有点可怕,所以我想把我所有的react组件都放在window.myComponents
的命名空间下
因此,定义变为:
window.myComponents.ImageGrid = React.createClass({...});
window.myComponents.ImageGridItem = React.createClass({...});
现在的问题是,由于ImageGrid
在其render()函数中引用了
,因此它的JS版本被编译为ImageGridItem()
,当然它是未定义的,因为它现在实际上是myComponents.ImageGridItem()
,react抱怨它找不到它
是的,我意识到我不能为组件include编写JSX,也不能手动编写myComponents.ImageGridItem({attr:'val'})
,但我更喜欢使用JSX html语法快捷方式,因为它更易于阅读和开发
有什么方法可以让它在仍然使用
语法的情况下工作呢?如果不能在JSX中定义JS名称空间,那么目前还没有办法做到这一点。带有JSX的名称空间在todo列表中
大多数人使用某种模块系统(browserify、webpack、requirejs),它们取代了名称空间,并允许轻松使用组件。还有很多其他好处,因此我非常推荐您研究一下。此拉取请求刚刚合并: 它允许您在React 0.11及更高版本中编写类似于
的内容
也就是说,建议使用适当的模块系统来管理依赖关系,以避免引入不需要的代码。但即使使用模块系统,如果一个模块返回多个react类,该怎么办?在这种情况下,您将如何引用每个单独的类?我在这里发布了一个关于这个问题的相关问题:最简单的方法是将每个类拆分为一个单独的模块。pull请求已经合并,因此如果您从主repo获得最新的消息,您会很好!
window.myComponents.ImageGrid = React.createClass({...});
window.myComponents.ImageGridItem = React.createClass({...});