如何在不使用JSX的情况下编写此内容?
var CommentBox = React.createClass({
render: function() {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList />
<CommentForm />
</div>
);
}
});
这来自react.js教程:http://facebook.github.io/react/docs/tutorial.html
我知道我可以做到以下几点:
return (
React.createElement('div', { className: "commentBox" },
React.createElement('h1', {}, "Comments")
)
但这只会增加一个元素。如何在彼此旁边添加更多内容。
答案 0 :(得分:14)
您可以使用在线Babel REPL(https://babeljs.io/repl/)作为将小块JSX转换为等效JavaScript的快捷方式。
var CommentBox = React.createClass({displayName: 'CommentBox',
render: function() {
return (
React.createElement("div", {className: "commentBox"},
React.createElement("h1", null, "Comments"),
React.createElement(CommentList, null),
React.createElement(CommentForm, null)
)
);
}
});
它还可以方便地检查它支持的ES6变换器的转换器输出。
答案 1 :(得分:5)
insin的答案是直接翻译,但您可能更喜欢使用工厂。
var div = React.createFactory('div'), h1 = React.createFactory('h1');
var CommentBox = React.createClass({displayName: 'CommentBox',
render: function() {
return (
div({className: "commentBox"},
h1(null, "Comments"),
React.createElement(CommentList, null),
React.createElement(CommentForm, null)
)
);
}
});
createFactory基本上部分应用了createElement。所以以下是等价的:
React.createElement(c, props, child1, child2);
React.createFactory(c)(props, child1, child2);
如果你只是使用es6但不喜欢JSX,那么你可以通过解构赋值来减少它的冗长。有关使用6to5而不是jsx的交互式示例,请参阅此jsbin。
var [div, h1, commentForm, commentList] = [
'div', 'h1', CommentForm, CommentList
].map(React.createFactory);
答案 2 :(得分:2)
如果您有可变数量的孩子,那么您可以使用: 使用带有一系列参数的apply函数。
React.createElement.apply(this, ['tbody', {your setting}].concat(this.renderLineList()))
其中renderLineList是例如:
renderLineList: function() {
var data=this.props.data;
var lineList=[];
data.map(function(line) {
lineList.push(React.createElement('tr', {your setting}));
});
return lineList;
}
答案 3 :(得分:1)
您只需将它们作为子项一个接一个地添加到您的父组件
return React.createElement("div", null,
React.createElement(CommentList, null),
React.createElement(CommentForm, null)
);
答案 4 :(得分:0)
我遇到了这个问题,花了一些时间才能逐步解决解释器的源代码:
var arrayOfData = [];
var buildArray = (function () {
var id;
var name;
return{
buildProc(index, oneName){
id = index;
name = oneName;
arrayOfData[index] = (React.createElement('Option', {id},name));
}
}
})();
// then
this.state.items = result;
var response = parseJson.parseStart(this.state.items);
var serverDims = response.split(":");
for (var i = 1; i < serverDims.length; i++) {
buildArray.buildProc(i, serverDims[i] )
}
// then
render(){
const data = this.props.arrayOfData;
return (
React.createElement("select", {},
data
)
// {data} Failed with "object not a valid React child, data with no curly's worked
)
}