有了Reactiv0.12,@jsx实用化就消失了,这意味着除了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)。
发布于 2014-12-31 02:01:05
不,不再可能为JSX使用自定义前缀。如果您需要这样做,您将需要修改JSX转换代码,或者创建一个假反应。
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;然后使用它,你进口假反应,并称之为反应。
var React = require('fake-react');
// ...
render: function(){ return <div />; }发布于 2014-12-31 01:24:04
如果希望在myConvenienceObject中包含一些元素,可以考虑使用children道具,如文档中所示。但这可能也需要在myConvenienceObject中进行一些修改,才能接受孩子们。
顺便说一句,我不知道这个createSpecializedClass函数是从哪里来的,它是怎么做的
https://stackoverflow.com/questions/27714884
复制相似问题