使用React v0.12 @jsx pragma消失了,这意味着不再能用除React.METHODNAME语法之外的任何东西输出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 :(得分:0)
如果您想在myConvenienceObject
中添加一些元素,可以考虑doc中显示的children
道具。但是,myConvenienceObject
也可能需要进行一些更改,以接受孩子们。
顺便说一下,我不知道这个createSpecializedClass
函数来自哪里以及它做了什么
答案 1 :(得分: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 />; }