Совместим ли контекст с «сложными» объектами? - PullRequest
1 голос
/ 26 марта 2020

Я использую 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, может быть ошибка?

Заранее спасибо за ваши ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...