我尝试在数组中定义一些步骤(我称之为页面),每个页面都应该可以在输入时调用函数。
我的页面定义位于页面数组中,nextHandler(自定义方法)设置当前页面索引并尝试调用已定义的函数。我的React类看起来(缩写)如下:
var App = React.createClass({
pageDefinitions: [
{
title: "Page 1",
enterFunction: this.enterPageOne
}
],
enterPageOne: function() {
console.log("Something useful here");
},
nextHandler: function() {
var st = this.getState();
st.currentPageIndex = st.currentPageIndex + 1;
this.setState(st);
var page = this.pageDefinitions[this.state.currentPageIndex];
console.log(typeof page.enterFunction);
console.log(page.title);
if ( typeof page.enterFunction === "function") {
page.enterFunction();
}
},
getInitialState: function() {
return {
currentPageIndex = -1
};
},
render: function() {
return (
<div>Left out</div>
}
});
虽然title
在控制台上正确打印出来,但该函数始终未定义。如何在我的数组中提供函数引用?
编辑:由于@gillesc和@ justin-morgan指出这是范围问题(这是pageDefinition,而不是类)
编辑2:找到解决方案,我将pageDefinitions
更改为getPageDefinitions()
,如下所示:
getPageDefinitions: funtion() {
var self = this;
return [
{
title: "Page 1",
enterFunction: selfenterPageOne
}
];
}
答案 0 :(得分:1)
this.enterPageOne
未定义,因为this
不受您认为的约束。试试这个:
var enterPageOne = function() {
console.log("Something useful here");
};
var App = React.createClass({
pageDefinitions: [
{
title: "Page 1",
enterFunction: enterPageOne
}
],
//...etc.
答案 1 :(得分:0)
如果您不想要App
组件之外的全局函数,可以试试这个。它并不吸引人,但你可以在范围内进行管理。
nextHandler: function() {
...
var page = this.pageDefinitions[this.state.currentPageIndex];
//register enterPageOne function into the array
page.enterFunction = this.enterOnePage;
console.log(typeof page.enterFunction);
console.log(page.title);
if ( typeof page.enterFunction === "function") {
page.enterFunction();
}
},
答案 2 :(得分:0)
不要在类级别定义数组,而是返回数组的函数:
getPageDefinitions: funtion() {
var self = this;
return [
{
title: "Page 1",
enterFunction: selfenterPageOne
}
];
}
请注意:作为缺点,每次调用时都会创建一个新数组。这应该被视为