javascript-react _this2.setState不是函数-可能存在绑定问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-react _this2.setState不是函数-可能存在绑定问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2842字,纯文字阅读大概需要5分钟。
内容图文
![javascript-react _this2.setState不是函数-可能存在绑定问题](/upload/InfoBanner/zyjiaocheng/669/6443565bb78540e6a26f57e523209cb5.jpg)
我是个超级新手,我一直在努力找出是什么原因导致Chrome控制台出现此错误
bundle.js:15316未捕获(承诺)TypeError:_this2.setState不是函数
我正在尝试使用Facebook进行简单登录到Web应用程序,以了解登录流程.
我已经在/(也是我的首页路线)上设置了登录名.我认为问题不在于路由或其他任何问题.这似乎是反应绑定中的一个问题,并且是该框架的新内容-我很难尝试解决该问题.
我的/或本地路线jsx看起来像这样
import React, { Component } from "react";
import { browserHistory } from 'react-router';
import FacebookLogin from 'react-facebook-login';
export default class Home extends Component {
constructor() {
super();
this.state = { isAuthenticated: false, user: null, token: ''};
this.setInputState = this.setInputState.bind(this);
}
/*logout = () => {
this.setState({isAuthenticated: false, token: '', user: null})
};*/
responseFacebook(response) {
console.log(response)
const accessTokenBlob = new Blob([JSON.stringify({input_token: response.accessToken}, null, 2)], {type : 'application/json'});
const options = {
method: 'POST',
body: accessTokenBlob,
//mode: 'cors',
cache: 'default'
};
fetch('http://localhost:8880/auth/facebook', options)
.then((r) => r.json())
.then(r => {
console.log(r)
if (r.status) {
this.setState({isAuthenticated: true, user: response.id, token: response.accessToken})
}
});
}
componentDidMount() {
browserHistory.push('/');
}
render() {
console.log(this.state)
let content = this.state.isAuthenticated ?
(
<div>
<p>Authenticated</p>
<div>
{this.state.user.name}
</div>
<div>
<button onClick={this.logout} className="button">
Log out
</button>
</div>
</div>
) : (
<div>
<FacebookLogin
appId="2128489194096154"
autoLoad={true}
fields="name,id,picture"
scope="public_profile"
callback={this.responseFacebook} />
</div>
);
return (
<div className="App">
{content}
</div>
);
}
}
该问题似乎发生在包含代码本部分的代码this.setState({isAuthenticated:true,user:response.id,token:response.accessToken})的行上
当我在浏览器的控制台上设置调试时,我将其视为this2错误堆栈链接中的替换内容:
fetch('http://localhost:8880/auth/facebook', options).then(function (r) {
return r.json();
}).then(function (r) {
console.log(r);
if (r.status) {
_this2.setState({ isAuthenticated: true, user: response.id, token: response.accessToken });
}
});
我在这里待了将近一天,而我却完全迷失了自己-已经读了几篇文章-却一无所获.当我继续尝试解决此问题时,如果问题仍然不清楚-请让我知道我可以添加的更多详细信息.
编辑#1
http:// localhost:8880 / auth / facebook这是我编写的后端,这是我控制的东西.来自后端的响应日志和在前端接收的数据是相同的.这告诉我cors或其他集成问题没有问题.
解决方法:
responseFacebook函数未绑定到类上下文.因此,此内部responseFacebook函数不引用该类.您可以像这样使用箭头功能
responseFacebook = (response) => {
或者您可以像这样在构造函数中显式绑定函数
constructor() {
super();
this.state = { isAuthenticated: false, user: null, token: ''};
this.setInputState = this.setInputState.bind(this);
this.responseFacebook = this.responseFacebook.bind(this);
}
内容总结
以上是互联网集市为您收集整理的javascript-react _this2.setState不是函数-可能存在绑定问题全部内容,希望文章能够帮你解决javascript-react _this2.setState不是函数-可能存在绑定问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。