javascript - React fetch 返回空值

标签 javascript reactjs promise jsx

我正在尝试使用 React 从 api 获取 json 数据并将其插入到 html 页面中。 函数如下:

function GetApiContent() {
  let value = fetch(api2)
    .then(response => response.json())
    .then(results => {
      console.log(results.title)

      return {
        title: results.title,
        date: results.date,
        hdurl: results.hdurl,
        explanation: results.explanation,
      }
    })
    .catch(err => {
      console.log(err)
    })

  return (
    <div>
      <h3>{value.title}</h3>
    </div>
  )
}

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Api test</h1>
          <Hola message="hello" />
        </header>

        <GetApiContent />
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    )
  }
}

控制台日志可以工作并返回标题,但是当我在函数中返回它时,它显示 h3 标签 empty在网页中。

最佳答案

fetch 是一个异步的、基于 Promise 的操作,它不会立即返回值。它返回 Promise。这就是您的代码不起作用的原因。您基本上是在尝试显示 Promise 的 value 属性,但这不是您想要的。您想要等待 Promise 解析(换句话说:WAITING fetch 完成请求并解析响应)。您可以通过这种方式显示 api 中的值:

const getApiContent = () => fetch(api2).then(response => response.json())

class App extends Component {
  state = {
    title: ''
  }

  componentDidMount() {
    getApiContent()
      .then(result => this.setState({ title: result.title }))
      .catch(err => console.log(err))
  }

  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Api test</h1>
          <Hola message="hello" />
        </header>
        {!!this.state.title && (
          <div>
            <h3>{this.state.title}</h3>
          </div>
        )}
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    )
  }
}

关于javascript - React fetch 返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47199245/

相关文章:

javascript - 如何在 react-router v4 中的后退按钮上显示模态框?

javascript - Promise.all 不等待所有 Promise 完成 firestore 数据读取

javascript - React Native 中的 Promise

javascript - 并行调用一系列 Promise,但按顺序解决它们,而不等待其他 Promise 解决

javascript - 密码输入键脚本在首次使用后无法运行

javascript - jquery ui slider 在单击轨道时定位下一个数组

javascript - 使用 jQuery,如何检测在具有多个提交图像的表单中单击了哪个 &lt;input type='image>?

javascript - 在 ReactJS 项目中为 Appcues 设置识别用户

javascript - 使用 Material-UI 创建自定义变体

javascript - 使用javascript动态更改css属性