javascript - react 中的异步xmlhttp请求

标签 javascript reactjs

我正在尝试在 React 中实现异步 XMLHttpRequest。 这是我的尝试:

var xhr = new XMLHttpRequest();
var json_obj, status = false;
xhr.open("GET", "https://jsonplaceholder.typicode.com/photos/", true);
xhr.onload = function (e) {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      json_obj = xhr.responseText;
      status = true;
    } else {
      console.error(xhr.statusText);
    }
  }
};
xhr.onerror = function (e) {
  console.error(xhr.statusText);
};
xhr.send(null);

class Welcome extends React.Component {
  render() {
    return (
      <div>
          <img src= {status ?  json_obj[0].url : 'loading...'}></img>
      </div>
    );
  }
}
ReactDOM.render(
   <Welcome/>,
   document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

我一直在考虑给它添加监听器,但我不知道该怎么做。

总的来说,我在异步 XMLHttpRequest 加载并返回值后遇到更新问题。

最佳答案

建议在componentDidMount生命周期方法中进行AJAX调用。

componentDidMount 用于副作用。添加事件监听器、AJAX、改变 DOM 等。

此外,您应该考虑使用新的 fetch API .

class Welcome extends React.Component {
  constructor() {
    this.state = {
      data: null,
    };
  }

  componentDidMount() {
    fetch('https://jsonplaceholder.typicode.com/photos/').then(response => {
      return response.json();
    }).then(json => {
        this.setState({ data: json});
    }).catch(error);
  }

  render() {
    if (this.state.data) {
      return <img src={this.state.data[0].url} />
    }
    else {
      return <div>Loading...</div>
    }
  }
}

关于javascript - react 中的异步xmlhttp请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701929/

相关文章:

javascript - 刷新后 Material-UI 中断

javascript - 用javascript中的另一个覆盖(包装)现有的jQuery点击事件

javascript - 设置 React.js 和 Babel

javascript - 使用 jQuery 的 angularjs 应用程序中的路由错误

javascript - 从 JSP scriptlet 变量中检查单选按钮

javascript - 我无法让这个回调工作

javascript - 如何将 props 传递给变量?

reactjs - 上下文提供者不触发 this.props.children 的重新渲染

reactjs - 在 React 前端提交表单时重定向和刷新页面

html - react 引导 CSS : I want my Container element to fill more of the entire page horizontally