2014-12-31 22 views
1

使用React v0.12 @jsx编译指示消失了,这意味着不能再使用React.METHODNAME语法以外的任何其他输出方式输出jsx。使用jsx语法输出除React以外的对象名称

对于我的使用情况下,我试图总结在另一个对象作出反应的对象,从而提供一些方便的方法,在我的组件文件,我希望能写:

var myConvenienceObject = require('React-Wrapper'); 
var Component = myConvenienceObject.createSpecializedClass({ 
    render: function() { 
    return <div /> 
    } 
}) 

然而JSX编译自动将<div />转换为React.createElement("div", null)

使用旧版本的React可以使用文件顶部的编译指示来处理此问题。然而,由于已经被删除,我想知道是否有目前没有办法更改的JSX编译,以便<div />将被转换的对象的名称为myConvenienceObject.createElement("div", null)

回答

0

不,它不再可能使用JSX定制的前缀。如果你需要这样做,你需要修改JSX转换代码,或者创建一个假的React。

var React = require('react'), FakeReact = Object.assign({}, React, { 
    createElement: function(component, props, ...children){ 
     // ... 

     // eventually call the real one 
     return React.createElement(component, props, ...children); 
    } 
}); 
module.exports = FakeReact; 

然后使用它导入假反应并将其称为React。

var React = require('fake-react'); 

// ... 
    render: function(){ return <div />; } 
+0

非常感谢您的信息!我想人们只需要记住在“React”中需要 –

0

如果你想使某些元素包含在你的myConvenienceObject ,你可以考虑children道具,如doc所示。但是这也可能需要在myConvenienceObject的一些变化,接受孩子。

顺便说一句,我不知道这是哪里createSpecializedClass功能的来源和它做什么

+0

对不起,我是不是它更加清晰'createSpecializedClass'只是各地的标准'React.createClass'方法的包装的一个例子。不幸的是,我不认为你的建议在这种情况下会起作用,因为我仍然无法在组件文件本身中使用jsx。 –

+0

会很好,如果你可以在这里粘贴一些代码片段。儿童道具也可以是jsx,不仅限于字符串 – ChinKang