React 道具:无法访问数组中对象中的键,索引均通过道具传递
React props: Unable to access key in object in array with index both passed with props
我正在处理一个 React 项目,在该项目中,我试图访问一个对象中的键,该对象是使用索引的数组中的一个元素,但未定义。
问题似乎是我得到了一个对象数组作为道具,索引也作为道具。当我尝试使用 props 中的索引访问数组中对象的 id 或 publicid 时,出现错误。下面是我得到的简化版本。
为什么会发生这种情况,我该如何解决?
console.log(this.props.images);
// [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
console.log(this.props.imageIndex)
// 0
console.log(this.props.images[0].publicid)
// 1234
console.log(this.props.images[this.props.imageIndex])
// {id: 1, publicid: "1234" }
console.log(this.props.images[this.props.imageIndex].publicid)
// Cannot read property 'publicid' of undefined
** 更新了更多代码 **
import React, { Component } from 'react';
import { connect } from 'react-redux';
import _ from 'lodash';
import * as actions from '../../actions';
class ImageBox extends Component {
handleClick() {
console.log('handleClose:');
}
renderImages() {
console.log(this.props.imageIndex);
// index logs okay
console.log(this.props.images[0]);
// shows correct object in the array
console.log(this.props.images[this.props.imageIndex]);
// again shows correct object in array
console.log(this.props.images[this.props.imageIndex].publicid);
// TypeError: Cannot read property 'publicid' of undefined
return (
<div onClick={this.handleClick.bind(this)}>
<div className="image-box-content">
</div>
</div>
);
}
}
render() {
return (
<div>
{this.renderImages()}
</div>
);
}
}
function mapStateToProps(state) {
return {
auth: state.auth,
successMessage: state.auth.success,
errorMessage: state.auth.error,
};
}
export default connect(mapStateToProps, actions)(ImageBox);
let images = [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}];
let imageIndex = 0;
console.log(images);
// [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
console.log(imageIndex)
// 0
console.log(images[0].publicid)
// 1234
console.log(images[imageIndex])
// {id: 1, publicid: "1234" }
console.log(images[imageIndex].publicid)
// Cannot read property 'publicid' of undefined
我只从您的代码中删除了 this.props
以证明您的代码完全可以正常工作。您的 console.log
之间肯定还有一些其他代码,也许您需要分享更多代码
尝试有条件地渲染,因为它是在渲染内部调用的,可能是因为 props 的初始值没有这个值。
renderImages() {
console.log(this.props.imageIndex);
// index logs okay
console.log(this.props.images[0]);
// shows correct object in the array
console.log(this.props.images[this.props.imageIndex]);
// again shows correct object in array
if(this.props.images[this.props.imageIndex])
console.log(this.props.images[this.props.imageIndex].publicid);
// TypeError: Cannot read property 'publicid' of undefined
return (
<div onClick={this.handleClick.bind(this)}>
<div className="image-box-content">
</div>
</div>
);
}
}
我正在处理一个 React 项目,在该项目中,我试图访问一个对象中的键,该对象是使用索引的数组中的一个元素,但未定义。
问题似乎是我得到了一个对象数组作为道具,索引也作为道具。当我尝试使用 props 中的索引访问数组中对象的 id 或 publicid 时,出现错误。下面是我得到的简化版本。
为什么会发生这种情况,我该如何解决?
console.log(this.props.images);
// [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
console.log(this.props.imageIndex)
// 0
console.log(this.props.images[0].publicid)
// 1234
console.log(this.props.images[this.props.imageIndex])
// {id: 1, publicid: "1234" }
console.log(this.props.images[this.props.imageIndex].publicid)
// Cannot read property 'publicid' of undefined
** 更新了更多代码 **
import React, { Component } from 'react';
import { connect } from 'react-redux';
import _ from 'lodash';
import * as actions from '../../actions';
class ImageBox extends Component {
handleClick() {
console.log('handleClose:');
}
renderImages() {
console.log(this.props.imageIndex);
// index logs okay
console.log(this.props.images[0]);
// shows correct object in the array
console.log(this.props.images[this.props.imageIndex]);
// again shows correct object in array
console.log(this.props.images[this.props.imageIndex].publicid);
// TypeError: Cannot read property 'publicid' of undefined
return (
<div onClick={this.handleClick.bind(this)}>
<div className="image-box-content">
</div>
</div>
);
}
}
render() {
return (
<div>
{this.renderImages()}
</div>
);
}
}
function mapStateToProps(state) {
return {
auth: state.auth,
successMessage: state.auth.success,
errorMessage: state.auth.error,
};
}
export default connect(mapStateToProps, actions)(ImageBox);
let images = [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}];
let imageIndex = 0;
console.log(images);
// [{id: 1, publicid: "1234" }, {id: 2, publicid: "5678"}]
console.log(imageIndex)
// 0
console.log(images[0].publicid)
// 1234
console.log(images[imageIndex])
// {id: 1, publicid: "1234" }
console.log(images[imageIndex].publicid)
// Cannot read property 'publicid' of undefined
我只从您的代码中删除了 this.props
以证明您的代码完全可以正常工作。您的 console.log
之间肯定还有一些其他代码,也许您需要分享更多代码
尝试有条件地渲染,因为它是在渲染内部调用的,可能是因为 props 的初始值没有这个值。
renderImages() {
console.log(this.props.imageIndex);
// index logs okay
console.log(this.props.images[0]);
// shows correct object in the array
console.log(this.props.images[this.props.imageIndex]);
// again shows correct object in array
if(this.props.images[this.props.imageIndex])
console.log(this.props.images[this.props.imageIndex].publicid);
// TypeError: Cannot read property 'publicid' of undefined
return (
<div onClick={this.handleClick.bind(this)}>
<div className="image-box-content">
</div>
</div>
);
}
}