【问题标题】:ReactJS: can't render api response into h2 tag but can log it to consoleReactJS:无法将 api 响应呈现到 h2 标记中,但可以将其记录到控制台
【发布时间】:2016-08-10 07:50:41
【问题描述】:

我在对 codepen 做出反应时遇到的另一个奇怪错误。

我正在尝试将 api 响应呈现为 <h2>,但不知何故我无法呈现每个属性。

  render: function () {
    return (
      <div className="weather-card">
        <h1>Weather For:</h1>
        <h2>{this.state.data.name}, {this.state.data.sys.country}</h2>
        <h2>{this.state.data.main.temp}</h2>
        <h2>{this.state.data.weather[0].main}</h2>
      </div>
    )
  }

仅渲染this.state.data.name 没有问题,例如但如果它是一个更深的对象,它会显示“未捕获的类型错误:无法读取未定义的属性‘国家’”...

但我可以将这个完全相同的属性记录到控制台。

任何人的想法?

这里还有codepen:http://codepen.io/rasmus/pen/aNGRJm

编辑:我通过将不同的属性分配为它们自己的状态属性来使其工作,如下所示:

success: (data) => {
            self.setState({
              city: data.name,
              temp: data.main.temp,
              weather: data.weather[0].main,
              isLoading: false
            });
            console.log(self.state.data.main.temp)
          },

但这有点hacky...

【问题讨论】:

  • this.state.data 不是一个对象。它是一个数组。正确的语法是this.state.data[0]
  • 需要401授权
  • 是的,不知何故发生在 15 分钟前
  • 问题似乎出在您的数据结构中...我更改了 URL(JSON) 并且怀疑它运行:codepen.io/DoubleU23/pen/dMerOg?editors=0010(尽管仅在控制台打开的情况下,但这似乎是代码笔错误?)
  • 现在发现了导致 401 的错误。现在 api 调用再次起作用了。

标签: javascript json reactjs openweathermap


【解决方案1】:

我查看了您的 codepen,但我没有遇到任何问题。
需要进行两项更改才能使其正常工作:

  • 将您的setState()(在您的Ajax 调用中)更改为包含data: data。确保您获得完整(引用)数据对象的状态。
  • 将您的渲染代码更改为包含this.state.data.sys.country

而且渲染效果很好,带有国家/地区。

这是link to edited codepen。 (希望此链接有效)

【讨论】:

  • 这就是我最初的 codepen 的样子。奇怪的。但是谢谢你 :) 现在分叉你的代码;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多