“React this.setState 不是函数”问题:上下文绑定
尝试使用第三方 API 开发应用程序时,常见的错误是“TypeError: this.setState is not a function”。当尝试处理 API 响应时会出现这种情况。该问题通常源于不正确的绑定。
提供的 React 代码使用 componentDidMount 方法定义了一个名为 AppMain 的组件。在此方法中,调用 VK API 来检索用户信息。在 API 响应的回调函数中,尝试使用 this.setState 来更新组件的状态。但是,出现错误是因为回调函数是在不同的上下文中执行的,并且无法访问 this.setState。
解决方案:
要解决此问题,回调函数必须绑定到正确的上下文。这可以通过使用 .bind 方法来实现:
VK.api('users.get', { fields: 'photo_50' }, function(data) { if (data.response) { this.setState({ // the error happens here FirstName: data.response[0].first_name }); console.info(this.state.FirstName); } }.bind(this));
通过将回调函数绑定到组件实例,回调函数中的 this 关键字将引用组件实例,从而允许访问其方法和属性,包括 this.setState.
附加绑定:
在某些情况下,可能需要附加绑定。例如,如果在 componentDidMount 中还调用了 VK init 方法,则该方法也必须绑定到组件实例:
VK.init(function() { console.info("API initialisation successful"); VK.api('users.get', { fields: 'photo_50' }, function(data) { if (data.response) { this.setState({ // the error happens here FirstName: data.response[0].first_name }); console.info(this.state.FirstName); } }.bind(this)); }.bind(this), function() { console.info("API initialisation failed"); }, '5.34');
以上是为什么 React 的 `this.setState` 函数在 ComponentDidMount 回调中不可用?的详细内容。更多信息请关注PHP中文网其他相关文章!