求助求助!,react的componentWillMount问题

#1
async componentWillMount() {
    try {
      const { data } = await ProjectApi.fetchRmdProjects()
      if (Array.isArray(data)) {
        this.setState({
          projects: data.map(i => i.projectResearchInfo).slice(0, 4)
        })
      }

    } catch (e) {
      console.log(e)
    }
  }

上述代码里 命名data就可以识别出并正确运行,但是把data换个命名(比如datad)就会识别不出,请问下各位大神这是为什么

#2

识别不出是指 const data这里报错了?

#3

不是 没有报错,就是data换一个名字申明的话,Array.isArray(data)这个if语句就不会进入,然后去除这个if语句,就会报map的错误

#4

查看下es6解构的相关知识

3 Likes
#5

async componentWillMount() {
try {
const { aaa } = await ProjectApi.fetchRmdProjects()
if (Array.isArray(aaa)) {
this.setState({
projects: aaa.map(i => i.projectResearchInfo).slice(0, 4)
})
}

} catch (e) {
  console.log(e)
}

}

比如这样,我把data换成了aaa也会报错吗?

#6

对的 就是这样改会有问题

#7

import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块对外接口的名称相同 – 引自阮老师的es6入门

#8

这不是import接受的变量呀,这个data是const定义的吧

#9

不可能吧?具体报错是啥呢?

#10

如果只是简单的申明一个常亮等于返回的数据,就没必要使用 const {data} 直接使用const data……应该就不会报错了吧。

#11

使用对象解构时, 变量名要和待解构对象中的属性名一致,才能正确赋值给变量.
不一致, 就赋默认值undefined.

const { data, code } = { data: '123' }
// 是下面的简写形式
const { data: data, code: code } = { data: '123' };
// data => '123'; code => undefined

// 自定义其它变量名
const { data: dt } = { data: '123' };
// dt => '123'


#12

解决了问题 非常感谢