【发布时间】:2016-07-20 13:29:10
【问题描述】:
我是 reactJs 的新手,正在使用 code。我希望将 babel 格式转换为 javascript。所以,我去了site 并将JXS 元素转换为javascript 中的相应元素以进行反应。现在如果使用 javascript 版本的代码
render: function render() {
var _this = this;
return React.createElement("div",{ className: "todoListMain" },
React.createElement("div",{ className: "header" },
React.createElement(
"form",
{ onSubmit: this.addItem },
React.createElement("input", { ref: function ref(a) {
return _this._inputElement = a;
},
placeholder: "enter task" }),
React.createElement("button",{ type: "submit" },"add"
)
)
),
React.createElement(TodoItems, { entries: this.state.items })
);
}
在浏览器控制台中出现错误Uncaught TypeError: Cannot set property '_inputElement' of undefined。但是当我使用相同代码的 babel 版本时
render: function() {
return (
<div className="todoListMain">
<div className="header">
<form onSubmit={this.addItem}>
<input ref={(a) => this._inputElement = a}
placeholder="enter task">
</input>
<button type="submit">add</button>
</form>
</div>
<TodoItems entries={this.state.items}/>
</div>
);
}
它工作正常。什么是在 babel 版本中没有发生的 javascript 代码中产生问题?是javascript版本的引用方式错误还是其他错误?
添加了 Javascript 转换代码。
var destination = document.querySelector("#container");
var TodoItems = React.createClass({
displayName: "TodoItems",
render: function render() {
var todoEntries = this.props.entries;
function createTasks(item) {
return React.createElement("li",{ key: item.key },item.text
);
}
var listItems = todoEntries.map(createTasks);
return React.createElement("ul",{ className: "theList" },listItems
);
}
});
var TodoList = React.createClass({
displayName: "TodoList",
getInitialState: function getInitialState() {
return {
items: []
};
},
addItem: function addItem(e) {
var itemArray = this.state.items;
itemArray.push({
text: this._inputElement.value,
key: Date.now()
});
this.setState({
items: itemArray
});
this._inputElement.value = "";
e.preventDefault();
},
render: function render() {
var _this = this;
return React.createElement("div",{ className: "todoListMain" },
React.createElement("div",{ className: "header" },
React.createElement(
"form",
{ onSubmit: this.addItem },
React.createElement("input", { ref: function ref(a) {
return _this._inputElement = a;
},
placeholder: "enter task" }),
React.createElement("button",{ type: "submit" },"add"
)
)
),
React.createElement(TodoItems, { entries: this.state.items })
);
}
});
ReactDOM.render(React.createElement("div",null,React.createElement(TodoList, null)), destination);
【问题讨论】:
-
为什么要转换代码? Babel 不是一种语言,它只是一个将 es6、es7 javascript 转换为与旧浏览器兼容的转换器。
-
如果您在浏览器中执行此操作,请发布您正在使用的所有资源。如果您使用 webpack,请发布您的整个配置。
-
@Daniel_L 已经添加了转换后的 javascript 代码,并且 babel 代码的链接在帖子中。请检查并恢复任何问题。
-
...仍然不明白您为什么要“转换”...
-
@erichardson30 只想使用 javascript 而不是
babel。
标签: javascript reactjs jsx