javascript - 如何根据回调的响应在 componentDidMount 中设置状态

标签 javascript reactjs fetch

我基本上是尝试根据从 API 获得的响应来设置状态。

api.js

const baseURL = "http://localhost:8000";

export const getStatus = (list) =>  {
  fetch(`${baseURL}/api/status`).then(res => {
    return res.json();
  }).then(status => {
    list.setState({status: status});
  });
};

这就是我从组件中调用它的方式

import React, {PropTypes} from 'react';
import {getStatus} from '../../../api';

class List extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      status: [],
    };
  }
  componentDidMount() {
    getStatus(this);
  }

我觉得从下游 api 文件传递​​ this 并修改状态并不是一个好的做法。有没有更“ react ”的方式来做到这一点?

我还尝试了另一种方法,即等待回调发回响应,然后根据响应修改状态,但是 setState 函数永远不会在 componentDidMount 中执行。如果有人可以指导我,那就太好了!

api.js

const baseURL = "http://localhost:8000";

export const getStatus = () =>  {
  fetch(`${baseURL}/api/status`).then(res => {
    return res.json();
  }).then(status => {
    return status;
  });
};
<小时/>
import React, {PropTypes} from 'react';
import {getStatus} from '../../../api';

class List extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      status: [],
    };
  }
  componentDidMount() {
    getStatus((status) => {
      this.setState({status: status});
    })
  }

最佳答案

更好的方法是在 componentDidMount 中使用 .then()

api.js

export const getStatus = () =>  {
  return fetch(`${baseURL}/api/status`).then(res => {
    return res.json();
  });
};

你的组件.jsx

import React, {PropTypes} from 'react';
import {getStatus} from '../../../api';

class List extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      status: [],
    };
  }
  componentDidMount() {
    getStatus()
      .then(status => {
        this.setState({status: status});
      })
  }

关于javascript - 如何根据回调的响应在 componentDidMount 中设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48712269/

相关文章:

javascript - Express:将一个方法的响应传递给同一篇文章中的另一个方法

javascript - React 中的 CSRF 字段 (JSX)

reactjs - 用于静态管理的包装组件

javascript - 为什么在 `catch` 中触发 `fetch` 取决于我如何在第一个 `then` 中返回响应?

javascript - Next.js 在 React 中导入从子组件获取数据到父页面

javascript - 强制文本区域输入以默认文本开头

javascript - ReactJS 使用 useState 双重渲染 bool 状态

javascript - 如果选中单选按钮,则停止表单提交

javascript - 我如何删除 react-native 按钮阴影?

php - 使用 PHP 获取表中的照片