【发布时间】:2016-03-08 15:09:36
【问题描述】:
我不明白为什么 ReactJs 会找到“字符串”而不是我的点击处理程序方法。
这是我的代码:
define(["react"], function(React) {
return React.createClass({
pageUp: function() {
console.log("go next page");
},
pageDown: function() {
console.log("go prev page");
},
toggleMenu: function() {
console.log("toggle menu");
this.state.menuStatus = !this.menuStatus;
},
getInitialState: function() {
return {
// Toggle menu status; false -> closed | true -> opened
menuStatus: false
}
},
render: function() {
var _this = this;
return (
<div className="overlay-nav">
<ul className="up-down-arrows">
<li onClick="{this.pageUp}" className="arrow-up"><i className="fa fa-angle-up"></i></li>
<li onClick="{_this.pageDown.bind(_this)}" className="arrow-down"><i className="fa fa-angle-down"></i></li>
</ul>
<div onClick="{_this.toggleMenu}" className="toggleMenu"><i className="fa fa-bars"></i></div>
</div>
);
}
});
});
我已经试过了
var _this = _this
// ....
<li onClick="_this.pageUp" ...
并像这样绑定
<li onClick="{this.pageUp.bind(this)}"
但是当我刷新页面时,我总是得到这个错误:
我得到的错误是:
Error: Expected onClick listener to be a function, instead got type string(…)
非常感谢任何帮助。
tks
【问题讨论】:
-
您需要删除引号。
<li onClick={this.pageUp.bind(this)}>... -
在原版 javascript 中,您可能会有 onclick="somefunctionname"。但不是在 JSX 中,你需要传递错误中所述的函数
-
另外,如果你使用 React.createClass,
.bind(this)不是必需的,一旦你删除了引号,你可能会收到一个警告,说明这是不必要的,因为 React 会为你这样做。 -
@nbermudezs 您应该将其发布为答案:)
-
@rossipedia 我刚刚做了。谢谢:)
标签: javascript reactjs react-jsx