reactjs - 上下文是否与“复杂”对象兼容?
问题描述
我正在使用 React js 和上下文。我有一个如下所示的“复杂”对象,我想使用 Context 使其在子视图中可用:
{
carSelected:
{
"carEntityId": 6,
"mileage": 100000,
"immatriculationDate": "2020-05-01T00:00:00",
"vin": "VIN-cF95ew0cp0ZhxE=w",
"licencePlate": "GR-999-RT"
"carModel": {
"carModelId": 2,
"brand": "Fiat",
"model": "Tipo",
"motor": "1.7D",
...
}
}
carsAvailable: [
{
<list of car like car selected>
}
]
}
在 App.js 中,我正在为此设置状态:
this.setCarEntity = (carSelected, carsAvailable) => {
console.info("[setCarEntity] Car selected: " + JSON.stringify(carSelected, null, 4));
this.setState({
carEntity: {
carSelected: carSelected,
carsAvailable: carsAvailable,
}
})
}
然后在 App 渲染中:
<CarEntityContext.Provider value={this.state.carEntity}>
<CarEntityHome/>
</CarEntityContext.Provider>
在我看来很好。
在 CarEntityHome 中,我试图访问该对象。我可以访问主键的值,这是有效的:
<CarEntityContext.Consumer>
{valueCE =>
(valueCE !== null && valueCE.carSelected !== null) &&
<p> Car selected | id {valueCE.carSelected.carEntityId} / {valueCE.carSelected.mileage} km <br/>
</p>
}
</CarEntityContext.Consumer>
但是,我无法访问嵌入在“carSelected”对象中的对象:
{valueCE.carSelected.carModel.carModelId}
这失败了,说:
TypeError: Cannot read property 'carModelId' of undefined
“carModel”子对象中的所有属性也是如此。
但是,如果我显示对象以检查它是否正确填充,实际上是这样:
<pre>{JSON.stringify(valueCE.carSelected, null, 2) }</pre>
给:
{
"carEntityId": 6,
"mileage": 100000,
"immatriculationDate": "2020-05-01T00:00:00",
"vin": "VIN-cF95ew0cp0ZhxE=w",
"licencePlate": "GR-999-RT",
"carModel": {
"carModelId": 2,
"brand": "Fiat",
"model": "Tipo",
"motor": "1.7D",
"horsePower": 57,
"kwPower": 40,
"fiscalPower": 4,
"energy": "petrol",
"finition": "Pop",
"maintenancePlan": null
},
"userDB": null
}
所以我在这里很困惑。我的对象已正确填充。但是在上下文中访问嵌入式/复杂对象是否有限制?我在这里遗漏了一些明显的东西吗?在官方文档中找不到答案,可能是一个错误?
提前感谢您的回答。
解决方案
推荐阅读
- javascript - 如何使用javascript在浏览器中修改文件内容
- python - 如何在 x 轴上显示所有 12 个月?
- javascript - 如何使用 Quantcast Choice 根据 IAB TCF v2.0 的同意显示或阻止个性化 Adsense 广告?
- java - 找不到任何支持 RSA/None/OAEPWITHSHA-256ANDMGF1PADDING 的提供程序
- javascript - 类型“typeof Realm”.ts(2339) 上不存在属性“App”
- laravel - 拉拉维尔。如何在一列的每一行中保存一个新值?
- c# - 如何从 EF Core 中的实体属性生成自定义 ID?
- c# - 任务和返回类型
- javascript - Ajax 作为结果从 php 获取整个页面
- javascript - 克尼克斯,从