代码之家  ›  专栏  ›  技术社区  ›  e1v1s

对象在控制台中打印,但无法使用它来设置状态-reactjs

  •  0
  • e1v1s  · 技术社区  · 6 年前

    我正在向API请求日期范围内加密货币的价格,并将结果存储在数组中。我们的目标是在页面加载时用这些价格填充一个折线图,但在我的生命周期中,我无法找出原因。 pricesArr 当我 console.log 但是如果我尝试 this.setState({dataArr: pricesArr}) 然后我得到一个 TypeError: Cannot read property 'setState' of undefined.

    中的对象 价格 在控制台中打印,如下所示:

    [{USD: 7629.4, EUR: 6503.14}, {USD: 6754.4, EUR: 5432.14} ... ]
    
    
    
    class App extends Component {
    
        constructor(props) {
        super(props);
        this.state = {
          dataArr:[]
    
         }
       }
    
    
      getData(){
    
        var url = 'https://min-api.cryptocompare.com/data/pricehistorical?fsym=BTC&tsyms=USD,EUR&ts='
    
        let pricesArr = []
        for (let i=1; i <= 30; i++) {
          const num = i.toString()
          const date = new Date('2018.06.' + num)
          const unixTimestamp = date / 1000
          const api_url = url + unixTimestamp
    
          if (i % 5 === 0 || i === 1) {
            axios.get(api_url)
            .then(res => {
                var obj = res.data['BTC']
                pricesArr.push(obj)
            })
          }
        }
    
        this.setState({dataArr: pricesArr})
      }
    
      componentDidMount () {
        this.getData()
      }
    
    
      render() {
        return (
          <div>
            Hi
          </div>
        );
      }
    }
    
    export default App;
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   christopher_pk    6 年前

    奇怪的是你的 this 未定义。试试这个。

      getData = () => {
    
        var url = 'https://min-api.cryptocompare.com/data/pricehistorical?fsym=BTC&tsyms=USD,EUR&ts='
    
        let pricesArr = []
        for (let i=1; i <= 30; i++) {
          const num = i.toString()
          const date = new Date('2018.06.' + num)
          const unixTimestamp = date / 1000
          const api_url = url + unixTimestamp
    
          if (i % 5 === 0 || i === 1) {
            axios.get(api_url)
            .then(res => {
                var obj = res.data['BTC']
                pricesArr.push(obj)
            })
          }
        }
    
        this.setState({dataArr: pricesArr})
      }