无法访问 JavaScript 对象数组中的属性(React.js)
2017-04-09
3381
我有一个 React.js 组件,它从 componentDidMount() 中的 API 调用中提取其初始状态数据。数据是一个对象数组。
我能够使用 JSON.stringify 查看数组和各个元素(用于调试),但是当我尝试访问元素中的属性时,出现错误,似乎暗示该元素未定义,尽管已检查过它并非如此。
代码:
class TubeStatus extends Component {
constructor(props) {
super(props);
this.state = { 'tubedata' : [] };
};
componentWillMount() {
let component = this;
axios.get('https://api.tfl.gov.uk/line/mode/tube/status')
.then( function(response) {
component.setState({ 'tubedata' : response.data });
})
.catch( function(error) {
console.log(JSON.stringify(error, null, 2));
});
};
render() {
return (
<div><pre>{this.state.tubedata[0].id}</pre></div>
);
}
}
错误:
Uncaught TypeError: Cannot read property 'id' of undefined
如果我使用 JSON.stringify() 显示 this.state.tubedata,则所有数据都在那里。
以我对 React.js 的有限了解,我怀疑这是因为 React.js 试图在 componentDidMount() 触发加载初始状态数据之前访问 .id 属性,从而返回未定义,但我可能完全错了。
有人能给我指出正确的方向吗?
2个回答
当您从 API 调用中获取数据时,初始渲染数据不可用,因此出现错误。
this.state.tubedata.length>0// check if tubedata is available
因此,
render() {
return (
<div><pre>{this.state.tubedata.length>0?this.state.tubedata[0].id:null}</pre></div>
);
}
Ved
2017-04-09
这是因为您有一个异步请求,并且由于状态数组最初为空,
this.state.tubedata[0]
最初未定义
在使用 id 之前请先检查
<div><pre>{this.state.tubedata.length > 0 && this.state.tubedata[0].id}</pre></div>
class TubeStatus extends React.Component {
constructor(props) {
super(props);
this.state = { 'tubedata' : [] };
};
componentWillMount() {
let component = this;
};
render() {
return (
<div>Hello <pre>{this.state.tubedata.length > 0 && this.state.tubedata[0].id}</pre></div>
);
}
}
ReactDOM.render(<TubeStatus/>, document.getElementById('app'));
<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="app"></div>
Shubham Khatri
2017-04-09