Доступ к информации, вложенной во второй уровень глубоко в массиве, с использованием метода React Native «fetch» - PullRequest
0 голосов
/ 06 июня 2019

Я могу получить доступ к информации на верхнем уровне массива.Но я не могу получить доступ к вещам на втором уровне в базе данных.

Здесь я использую базовый метод «Fetch»:

https://facebook.github.io/react-native/docs/network

И это база данных, к которой я пытаюсь получить доступ.(Я удалил свой ключ API из URL, но похоже, что он все еще работает. Если он больше не работает для вас, я скопировал и вставил содержимое ниже в разделе кода.) https://api.tfl.gov.uk/Line/london-overground/Status

Я хочу получить доступ к краткому тексту описания текущего состояния линии (например, «незначительная задержка», «сокращенное обслуживание» и т. Д.).Рассматриваемая информация хранится в «lineStatuses» / «statusSeverityDescription» в базе данных.

Смотрите ниже, что я пробовал до сих пор с образцами Экспо Снэк.

Вариант 1)

https://snack.expo.io/@leourushi/api-call-01

Если я использую

{item.name} 

Правильно возвращает имя строки,

Однако, если я попробую это,

{item.lineStatuses.statusSeverityDescription} 

Экран ничего не вернет.

Вариант 2)

https://snack.expo.io/@leourushi/api-call-02

Я изменил начальный экземпляр источника данных следующим образом:

dataSource: responseJson[0].lineStatuses

Изатем я попытался вернуть это:

{item.statusSeverityDescription}

На этот раз он правильно возвращает текст описания статуса линии.Но эмулятор Android возвращает это сообщение об ошибке:

«Сбой дочернего типа контекста: недопустимый дочерний контекст virtualizedCell.cellKey типа number, предоставленный CellRenderer, ожидаемый string ...

Ниже приводится содержание базы данных, когда я проверял ранее.(Вы также увидите ту же базу данных в ссылках Expo выше)

[
  {
    "$type": "Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities",
    "id": "london-overground",
    "name": "London Overground",
    "modeName": "overground",
    "disruptions": [],
    "created": "2019-06-03T16:21:44.04Z",
    "modified": "2019-06-03T16:21:44.04Z",
    "lineStatuses": [
      {
        "$type": "Tfl.Api.Presentation.Entities.LineStatus, Tfl.Api.Presentation.Entities",
        "id": 0,
        "lineId": "london-overground",
        "statusSeverity": 7,
        "statusSeverityDescription": "Reduced Service",
        "reason": "LONDON OVERGROUND: Until further notice, reduced service between Gospel Oak and Barking. A temporary timetable is in place, with four car trains running every 30 minutes. New trains may provide additional services, resulting in an increased frequency. Tuesday 28, Wednesday 29, Thursday 30 and Friday 31 May, the 2313 Barking to Gospel Oak service will terminate at Upper Holloway at 23:40 and the 23:25 train from Gospel Oak to Barking will not run and the last departure will be at 22:48",
        "created": "0001-01-01T00:00:00",
        "validityPeriods": [
          {
            "$type": "Tfl.Api.Presentation.Entities.ValidityPeriod, Tfl.Api.Presentation.Entities",
            "fromDate": "2019-05-20T03:30:00Z",
            "toDate": "2019-08-25T01:29:00Z",
            "isNow": false
          }
        ],
        "disruption": {
          "$type": "Tfl.Api.Presentation.Entities.Disruption, Tfl.Api.Presentation.Entities",
          "category": "Information",
          "categoryDescription": "Information",
          "description": "LONDON OVERGROUND: Until further notice, reduced service between Gospel Oak and Barking. A temporary timetable is in place, with four car trains running every 30 minutes. New trains may provide additional services, resulting in an increased frequency. Tuesday 28, Wednesday 29, Thursday 30 and Friday 31 May, the 2313 Barking to Gospel Oak service will terminate at Upper Holloway at 23:40 and the 23:25 train from Gospel Oak to Barking will not run and the last departure will be at 22:48",
          "additionalInfo": "For train times see the <a href=\"http://content.tfl.gov.uk/gospel-oak-to-barking-temporary-timetable-march-2019.pdf?5\">temporary timetable</a>. For more information and travel options, visit <a href=\"https://tfl.gov.uk/modes/london-overground/gospel-oak-to-barking-improvements?cid=gospel-oak-barking-trains\">tfl.gov.uk/gospel-oak-barking-trains</a>",
          "created": "2019-05-14T14:07:00Z",
          "affectedRoutes": [],
          "affectedStops": [],
          "closureText": "reducedService"
        }
      }
    ],
    "routeSections": [],
    "serviceTypes": [
      {
        "$type": "Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities",
        "name": "Regular",
        "uri": "/Line/Route?ids=London Overground&serviceTypes=Regular"
      },
      {
        "$type": "Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities",
        "name": "Night",
        "uri": "/Line/Route?ids=London Overground&serviceTypes=Night"
      }
    ],
    "crowding": {
      "$type": "Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities"
    }
  }
]

Мне нужен указатель на то, как извлечь информацию из вещей, спрятанных на втором уровне в массиве, используя React Native.Мне не нужно перебирать базу данных.Мне нужно извлечь только одну вещь.

1 Ответ

1 голос
/ 07 июня 2019

Кажется, проблема в том, что ваш формат ключа - число.

Используйте опцию 2 (это правильный способ заполнить ваш источник данных) и добавьте .toString() к вашему экстрактору ключей, например, - keyExtractor={({id}, index) => id.toString()}

...