【发布时间】:2019-08-25 16:13:59
【问题描述】:
我有一个数组,里面有像这样的对象
OrchardSite > Array(16) > 0: {blocks: Array (3), name: "asdasd", code: "R101A"}
1: {blocks: Array (7), name: "dasdas", code: "R555"}
我有一个看起来像这样的 JSX
<select className="input-field-slider dropdown w-select" onChange={() => this.setOrchard}>
<option>All Sites</option>
{orchardSites
.map((orchardSite, i) => (
<option key={i} value={orchardSite.code}>
{orchardSite.code + " " + orchardSite.name}
</option>
))}
每次用户从下拉列表中选择一个选项时,我都会触发此功能..
setOrchard = (event) => {
const orchardId = event.target.value;
console.log("orchardID", orchardId) // returns selected ID
console.log("OrchardSite", this.props.metadata.OrchardSites) // returns array
console.log("testing1", this.props.metadata.OrchardSites[parseInt("R1018A")] // undefined
console.log("testing2", this.props.metadata.OrchardSites[parseInt(orchardId)]) // undefined
console.log("new value", this.props.metadata.OrchardSites[parseInt(orchardId)].blocks) // Cannot read property 'blocks' of undefined
if (orchardId.length > 0) {
if (!this.props.metadata.OrchardSites[parseInt(orchardId)].blocks)
this.props.metadata.orchardSites[parseInt(orchardId)].blocks = []
console.log("SetttingOrchardLocation", this.props.metadata.orchardSites)
this.setState({ orchardId: orchardId, block: null, area: null, row: null, site: Object.assign({}, this.props.metadata.orchardSites[parseInt(orchardId)]) })
console.log("Testing OrchardId", this.props.metadata.orchardSites[parseInt(orchardId)])
// parseInt to get access to the array index, (Maybe I need to .ToString() somewhere?
}
}
返回..
未捕获的类型错误:无法读取未定义的属性“块”
我怎样才能访问这个数组?
【问题讨论】:
-
我认为问题来自您的
this.props.metadata,如果您从 fetch API 或使用 redux 获取此道具...,在第一次渲染时,您的道具将为空,所以您需要检查this.props.metadata是否有价值(或this.props.metadata.OrchardSites[parseInt(orchardId)])。 -
这一行也会报错:
this.props.metadata.OrchardSites然后this.props.metadata.orchardSites -
是的,我注意到了错字,它没有任何区别......在第一次渲染时,我可以完全访问道具,我有一个 console.log
-
console.log(this.props.metadata.OrchardSites)和console.log(this.props.metadata.OrchardSites[parseInt(orchardId)])在您的console.log("orchardID", orchardId)之后,看看显示什么 -
console.log("orchardID", orchardId)返回选中的值console.log("OrchardSite", this.props.metadata.OrchardSites)返回如上所示的数组,console.log("testing1", this.props.metadata.OrchardSites[parseInt("R1018A")])未定义,字符串为硬编码 id,console.log(this.props.metadata.OrchardSites[parseInt(orchardId)])未定义
标签: javascript arrays reactjs ecmascript-6 jsx