TypeError:使用状态时无法读取未定义的属性“0”

Posted

技术标签:

【中文标题】TypeError:使用状态时无法读取未定义的属性“0”【英文标题】:TypeError: Cannot read property '0' of undefined when using state 【发布时间】:2021-02-09 21:29:05 【问题描述】:

我在尝试将 Axios 响应数据传递给组件时遇到问题。在 componentDidMount 期间的控制台日志中,它会记录得很好,但是对于引用和取值状态,它表示它无法读取未定义的属性 0。

我认为这与导致错误的 dom 渲染之前未加载的数据有关。但是,我在网上阅读的所有内容似乎都表明这是处理它的正确方法。

import React,  Component  from 'react';
import Header from './components/header.js';
import Home from './components/home.js';
import './App.css';
import Axios from 'axios';

class App extends Component 
  constructor(props) 
    super(props);
    this.state = 
      sqlClosed: [],
      sqlClosedRebill: [],
      sqlPotential: [],
      sqlPotentialRepeat: [],
      sqlRebill: [],
      sqlRepeat: [],
      loaded: false,
    ;
  

  componentDidMount() 
    Axios.get('url', 
      headers:  'Content-Type': 'application/json' ,
      data: ,
    )
      .then((response) => 
        this.setState(
          sqlClosed: response.data.result.sqlClosed,
          sqlClosedRebill: response.data.result.sqlClosedRebill,
          sqlPotential: response.data.result.sqlPotential,
          sqlPotentialRepeat: response.data.result.sqlPotentialRepeat,
          sqlRebill: response.data.result.sqlRebill,
          sqlRepeat: response.data.result.sqlRepeat,
        );
        this.setState( loaded: true );
        console.log(this.state.sqlClosed.recordset[0].sQuoteType);
      )
      .catch((error) => 
        console.log(error);
      );
  

  render() 
    return (
      <>
        <Header />
        <Home
          quote=this.state.sqlClosed.recordset[0].sQuoteType
          value=this.state.sqlClosed.recordset[0].nCount
        />
      </>
    );
  


export default App;

【问题讨论】:

【参考方案1】:

问题是在第一次渲染时你的数组都是空的。我确实看到那里有一个标志 (loaded) 来指示数据何时加载。为什么不好好利用呢?

  render() 
    return (
      <>
        <Header />
       this.state.loaded && 
        <Home
          quote=this.state.sqlClosed.recordset[0].sQuoteType
          value=this.state.sqlClosed.recordset[0].nCount
        />
       
      </>
    );
  

【讨论】:

以上是关于TypeError:使用状态时无法读取未定义的属性“0”的主要内容,如果未能解决你的问题,请参考以下文章

NativeScript Vue - VueX 不工作:TypeError:无法读取未定义的属性“状态”

笑话:TypeError:无法读取未定义的属性“变量”

TypeError:无法读取未定义的属性“加载”

反应:TypeError:无法读取未定义的属性“setState”

未处理的拒绝(TypeError):无法读取未定义的属性“映射”? (反应火力基地)

TypeError:无法读取反应中未定义的属性“减少”