使用jsx语法的React以外的输出对象名称

时间:2014-12-31 01:10:32

标签: reactjs react-jsx

使用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)

2 个答案:

答案 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 />; }