我有一个有趣的问题,我似乎不明白。我必须忽视一些明显的问题。我在检查用户是否登录后尝试设置状态,所以我决定实现一个回调函数。但是,它看起来不像我的回调正在执行。谁能告诉我我做错了什么? checkAuthentication函数工作正常,而不是回调函数。有什么想法吗?
这是我展示问题的JSFiddle。
https://jsfiddle.net/69z2wepo/16069/
checkAuthentication: function( cb ) {
this.setState({
loggedIn: true,
userId: 3243,
}, function(){
if (cb && (typeof cb == "function")) {
cb();
console.log("wtf");
}
});
},
componentDidMount: function() {
this.checkAuthentication( function() {
this.setState({
view: "user",
viewUserId: 54234,
});
}).bind(this);
},
答案 0 :(得分:1)
您可以添加.bind(this)
来修复回调(有关详情,另请参阅How to access the correct `this` context inside a callback?)。
但是,您在错误的地方添加了.bind(this)
电话。你在做什么
this.checkAuthentication(...).bind(this);
即。您在.bind
的返回值上致电this.checkAuthentication
。但是,this.checkAuthentication
不会返回任何内容,因此浏览器会正确抛出错误:
未捕获的TypeError:无法读取未定义的属性'bind'
您必须在回调函数上调用.bind
:
this.checkAuthentication(function() { ... }.bind(this));
Fixed fiddle。另请参阅上面的链接,了解this
问题的其他解决方案。