Я использую React js и Context. У меня есть «сложный» объект, как показано ниже, который я хочу сделать доступным в дочерних представлениях, используя 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>
}
]
}
В приложении. js, я устанавливаю состояние для этого:
this.setCarEntity = (carSelected, carsAvailable) => {
console.info("[setCarEntity] Car selected: " + JSON.stringify(carSelected, null, 4));
this.setState({
carEntity: {
carSelected: carSelected,
carsAvailable: carsAvailable,
}
})
}
А потом в приложении рендер:
<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".
Но, если я отображаю объект, чтобы проверить, правильно ли он заполнен, это действительно так:
<code><pre>{JSON.stringify(valueCE.carSelected, null, 2) }
Даешь:
{
"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
}
Так что я очень смущен здесь. Мой объект правильно заселен. Но есть ли в контексте ограничение доступа к встроенному / сложному объекту? Я что-то упускаю здесь очевидное? Не удалось найти ответ в официальном do c, может быть ошибка?
Заранее спасибо за ваши ответы.