如何在渲染我的React组件之前让axios获取请求等待

T号屋

我有以下代码:

import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";
import axios from "axios";

var config = {
  headers: {
    Accept: "application/json; odata=verbose",
    Authorization: "Bearer " + access_token,
  },
};

class Searchbar extends React.Component {
   async componentWillMount() {
    await axios.get(contracts, config).then((res) => {
      this.setState({ allContracts: res.data });
    });
  }
  render() {

    return (
      <div className="searchbar_wrapper">
        <Autocomplete
          freeSolo
          id="contract-search-bar"
          disableClearable
          options={contracts.map((option) => option.name)}
          onChange={(event, value) => {
          let selectedContractID =(value)
          }}
          renderInput={(params) => (
            <TextField
              {...params}
              label="Search"
              margin="normal"
              variant="outlined"
              InputProps={{ ...params.InputProps, type: "search" }}
            />
          )}
        />
      </div>
    );
  }
}
export default Searchbar;

我正在使用组件安装,因为我希望此函数在渲染组件之前先进行调用... axios调用将得到如下结果:

    results = [
      { name: "aaa" },
      { name: "bb" },
      { name: "cccc" },
    ];

结果将超过500个条目。

我遇到的问题是,当组件渲染时,它一直在说:

Cannot read property 'allContracts' of null

这样做的原因是因为axios函数尚未完成获取结果的过程...

请让我知道如何延迟渲染并等待axios首先获得结果然后继续

阿斯特里特·斯潘卡

这会有所帮助。无需ComponentWillMount还需要进行错误处理。

    state = {
      allContracts: null,
      error: false
    }

    componentDidMount(){
        axios.get(contracts, config)
         .then((res) => {
            this.setState({ allContracts: res.data });
        })
        .catch((err) => this.setState({error: true}))
    }

    render() {
      if(!state.allContracts && !this.state.error){
        return null; // add a spinner or something until the posts are loaded
      }

      if(this.state.error){
         return 'Something wrong happened...' // just an example of error
      }

     return // this will run after the posts are loaded
   }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取组件以在渲染之前等待异步数据

如何在React JS中渲染之前等待状态?

如何在获取数据之前停止组件渲染?

React:如何在渲染之前确保请求的数据可用?

在调用渲染组件之前,如何在浏览器JSX编译器中等待

如何在渲染Vue组件之前等待窗口对象中的变量?

如何在我的 React 组件中渲染 json?

如何在$ .get()完成之前等待在react.js中渲染视图?

如何在 React.js 中渲染页面之前等待 fetch 完成

如何在渲染ReactJS之前获取数据

如何在渲染之前获取 url

如何在react js中渲染组件之前进行api调用

ReactJs:如何在渲染之前等待componentDidMount()完成?

我如何填充axios获取数据数组并将其传递给Vuejs组件道具以在组件中进行列表渲染

组件在渲染之前不会等待API响应

在axios中渲染React组件

如何使用vue + axios在获取请求中使用异步/等待?

在渲染之前添加数据后如何获取子组件?

在 React 中渲染组件时,如何使用一个 axios 请求的输出作为另一个 axios 请求的依赖项?

如何在 React 中强制渲染组件

如何在React组件中渲染SVG

如何在React中延迟组件渲染?

如何在React中渲染递归组件?

如何在组件重新渲染之前获得 Redux 状态?

如何在组件渲染之前在vuex中填充存储

Angular2:如何在渲染组件之前加载数据?

如何在组件渲染发生之前检查条件?

我如何在 axios 中发出获取请求以通过使用 react.js 单击他的名字来获取用户的信息

如何在React中等待多个异步等待请求