React Native调用this.state报Undefined is not an object问题求助
问题根因
报错的核心原因是数组map方法使用普通匿名函数导致组件实例的this指向丢失。
你在getQuestions方法中调用this.state.questions.map和qIndex.answers.map时,传入的是function() {}格式的普通匿名函数,普通函数的this指向的是调用时的上下文而非当前组件实例,因此在函数内部访问this.state会抛出undefined相关错误。
你之前提前把state值赋值给局部变量能生效,是因为变量声明在map函数外部,此时的this还是绑定组件实例的,相当于提前存值绕开了内部的this指向问题。
修复方案
把两个map的回调函数替换为箭头函数即可,箭头函数不会创建独立的this,会继承外层作用域的this指向(也就是当前组件实例),修改后就可以在map内部直接访问this.state或者调用组件方法。
具体修改代码:
- 外层问题遍历的map替换:
// 原代码 this.state.questions.map(function (qIndex, index) { // 修改为 this.state.questions.map((qIndex, index) => {
- 内层选项遍历的map替换:
// 原代码 qIndex.answers.map(function (ansIndex, index1) { // 修改为 qIndex.answers.map((ansIndex, index1) => {
额外优化提示
你代码中样式数组的写法存在小错误:style={[styles.question], {xxx}}的格式不符合规范,多出来的右括号会导致外层的styles.question不生效,正确写法应该是把所有样式对象放在同一个数组内:
style={[styles.question, { backgroundColor: this.state.theme.secondary, color: font_color, padding: '2%', borderRadius: 5 }]}
内容的提问来源于stack exchange,提问作者user14055011
相关产品推荐
相关产品推荐

