React Native调用setState报TypeError错误的问题求助
解决React中
this.setState undefined的问题 嘿,我来帮你搞定这个问题!你遇到的TypeError: undefined is not an object (evaluating '_this2.setState')确实是**this上下文丢失**导致的——虽然你绑定了_requestCameraPermission方法,但问题出在包含.then回调的_getPhotosFromDevice方法上:这个方法本身的this没有指向类实例,所以异步回调里的this自然找不到setState了。
下面给你几个靠谱的解决方案,选一个适合你的就行:
方案1:在构造函数里绑定_getPhotosFromDevice
和你绑定_requestCameraPermission的方式一样,把这个出问题的方法也绑定到类实例上:
constructor(props) { super(props); this.state = { photos: [] }; // 已有的权限请求方法绑定 this._requestCameraPermission = this._requestCameraPermission.bind(this); // 新增这行,绑定获取照片的方法 this._getPhotosFromDevice = this._getPhotosFromDevice.bind(this); }
方案2:用箭头函数定义类方法
箭头函数会自动捕获外层的this(也就是类实例),根本不用手动绑定,代码更简洁:
class YourComponent extends React.Component { state = { photos: [] }; // 用箭头函数定义获取照片的方法 _getPhotosFromDevice = () => { // 你的异步调用逻辑 somePhotoApi.getPhotos() .then(r => { this.setState({ photos: r.edges }, () => { console.log("state after _getPhotosFromDevice: " + JSON.stringify(this.state)); }); }); } // 其他方法... }
方案3:确保调用_getPhotosFromDevice时的上下文正确
如果你是在事件处理里调用这个方法(比如按钮点击),可以直接用箭头函数包裹调用:
<button onClick={() => this._getPhotosFromDevice()}>获取设备照片</button>
为什么绑定_requestCameraPermission没用?
因为你出错的代码在_getPhotosFromDevice的异步回调里,_requestCameraPermission是完全独立的另一个方法,它的绑定不会影响其他方法的this上下文哦。
另外补充一句:你已经在.then里用了箭头函数,这部分是对的——箭头函数不会重新绑定this,但前提是外层的_getPhotosFromDevice执行时this是正确的,不然箭头函数也拿不到正确的类实例上下文。
内容的提问来源于stack exchange,提问作者MenG
相关产品推荐
相关产品推荐

