为了账号安全,请及时绑定邮箱和手机立即绑定

访问 JavaScript 数组返回“未定义”

访问 JavaScript 数组返回“未定义”

白衣非少年 2021-05-31 18:04:05
我正在用纯 Reactjs 构建一个简单的应用程序。我遇到问题的组件是一个组件,它应该通过映射以前通过从外部 API 获取一些数据来填充的数组来呈现多个按钮。这个数组填充在一个类方法中,结果最终被复制到另一个数组中,该数组是组件状态的一部分当我在组件的渲染方法上 console.log 数组的内容时,一切看起来都很好。但是,如果我尝试按索引打印特定元素,控制台上会打印“未定义”。因此,地图功能不会呈现所有所需的按钮。我设法围绕我填充数组的方式找到了不同的文档,但到目前为止,没有一篇文章表明我在做任何根本错误的事情。至少不是我能看到的。State 存储一个空数组作为开始,并且在 componentWillMount 方法中调用 API 来获取数据并更新数组,如下所示:this.state = {      resources: []}getAPIavaiableResources(api_resource) {    let buttonsArray = []    fetch(api_resource)      .then(response => response.json())      .then(data => {        for (let i in data) {          buttonsArray.push({id: i, name: i, url: data[i]})        }      }).catch(error => console.log(error))    this.setState({resources: buttonsArray})}componentWillMount() {    this.getAPIavaiableResources(ROOT_RESOURCE)}render() {    const { resources } = this.state;    console.log(resources)    console.log(resources[0])    return (      <div className="buttons-wrapper">        {          resources.map(resource => {            return <Button                      key={resource.id}                      text={resource.name}                       onClick={this.handleClick}                     />          })        }      </div>    )}这是在渲染方法上打印到控制台上的内容。[]0: {id: "people", name: "people", url: "https://swapi.co/api/people/"}1: {id: "planets", name: "planets", url: "https://swapi.co/api/planets/"}2: {id: "films", name: "films", url: "https://swapi.co/api/films/"}3: {id: "species", name: "species", url: "https://swapi.co/api/species/"}4: {id: "vehicles", name: "vehicles", url: "https://swapi.co/api/vehicles/"}5: {id: "starships", name: "starships", url: "https://swapi.co/api/starships/"}length: 6__proto__: Array(0)谁能看到我做错了什么?我正在推送一个对象,因为我确实想要一个对象数组,尽管 Javascript 中的数组也是对象。任何帮助,将不胜感激。
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

目前,您正在设置状态,而无需等待承诺得到解决。为此,请this.setState({resources: buttonsArray})在for循环后移动。


此外,您可以有条件地渲染组件,直到您通过执行以下操作从远程资源中获得所需内容:


render () {

  const { resources } = this.state;

  return resources.length

    ? (

      <div>Your content...</div>

    )

    : null // or some loader

}


查看完整回答
反对 回复 2021-06-03
  • 2 回答
  • 0 关注
  • 321 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信