У меня есть данные как:

Rooms.
Rooms   : {"_id":{"$oid":"46746766474664"},"RoomID":{"$numberInt":"1"},"RoomDesc":"1st Floor"}

Я пытаюсь получить доступ и показать их в раскрывающемся списке.

Во время монтирования я делаю эту операцию.

mongodb.db("TestDB")
            .collection("Rooms")
            .find({}, { limit: 1000 })
            .asArray()
            .then(rooms => {
                this.setState({ rooms });
            });

И в пригодном для выпадающего списка,

   <Dropdown
                                placeholder='Select Rooms'
                                fluid
                                search
                                selection
                                options={this.state.rooms.RoomID}
                                //value={RoomID}
                            />

Его всегда возвращается Null без записей. Как я могу получить доступ к этим данным? я должен использовать карту (или) любое другое предложение. Есть ли способ, которым мы можем построить на консоли.

С mongodb подскажите все результаты выглядит хорошо.

1
Sr New 27 Дек 2019 в 00:06

2 ответа

Лучший ответ

Я думаю, что вы используете Dropdown - Semantic UI React. Вы получаете раскрывающийся список без значений из-за структуры вашего состояния. Dropdown options должен быть таким

 {
    key: "....",
    text: "...",
    value: "..."
  }

Использование функции карты для преобразования данных строки в минимальные требования Dropdown.
< Сильный > Обновление если MongoDB вернет результат

 rooms: [
        {
          _id: { $oid: "46746766474664" },
          RoomID: { $numberInt: "1" },
          RoomDesc: "1st Floor"
        },
        {
          _id: { $oid: "46746766474665" },
          RoomID: { $numberInt: "2" },
          RoomDesc: "2st Floor"
        }
      ]

Тогда вы можете преобразовать в желаемую структуру

  this.setState({
          options: [
            ...this.state.rooms.map(item => {
              return {
                key: item._id.$oid,
                text: item.RoomDesc,
                value: item.RoomID.$numberInt
              };
            })
          ]
        });

Рабочий временный образец Codesandbox с фиктивными данными .

1
Alex 27 Дек 2019 в 10:58

Если rooms является массивом, вы не можете просто использовать this.state.rooms.RoomID. Возможно, нужна какая-то петля или карта

0
Sekru 26 Дек 2019 в 21:09