Невозможно прочитать свойство 'map' из undefined, TypeError - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь, чтобы мое приложение карты реагирования ссылалось на другую коллекцию моего mongodb.Функция Sessions отлично отображает маркеры, но когда я пытаюсь отобразить их оба, возникает ошибка.Я пытаюсь использовать тот же формат, который использовался для отображения данных из другой коллекции БД:

         {this.state.Sessions.map(UsersSession => (
           <Marker
                   position={[UsersSession.latitude, UsersSession.longitude]}
                   icon={myIcon} >
              <Popup>
              <em>{UsersSession.event}, </em>
                  {UsersSession.venue} {'\n'}

                  <Button color="primary" size="sm">More info</Button>
                  <Chart/>
              </Popup>
           </Marker>
         ))}

         {this.state.members.map(Users => (
           <Marker
                   position={[Users.location.latitude, Users.location.longitude]}
                   icon={myIcon} >
              <Popup>
              <em>{Users.name}, </em>
                  {Users.bio} {'\n'}

                  <Button color="primary" size="sm">More info</Button>
                  <Chart/>
              </Popup>
           </Marker>
         ))}
       </Map>

Это приводит к ошибке:

TypeError: Не удается прочитатьсвойство 'map' не определено

, хотя у меня определено className.Может ли это иметь какое-то отношение к моей схеме?или это проблема в моем коде JSX.

Файл my members.js (на стороне сервера):

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

const express = require('express');
const Joi = require("joi");

const db = require('../db');
const members = db.get('members');

//Defining the schema for the backend.
const schema1 = Joi.object().keys({
    name:   Joi.string().min(1).max(100).required(),
    bio:   Joi.string().min(1).max(500).required(),
    latitude:    Joi.number().required(),
    longitude:   Joi.number().required()
});

const router = express.Router();

//Gets all sessions that are found within the DB.
router.get('/', (req, res) => {
  members
  .find()
  .then(allmembers =>{
      res.json(all);
    });
});
//POST for when no errors are produced.
router.post('/', (req, res, next) => {
  const result = Joi.validate(req.body, schema);
  if (result.error == null) {
//Removes the need to write eg) req.body.name below.
    const {name,bio, latitude, longitude,} = req.body;
    const members = {
      name,
      bio,
      latitude,
      longitude,
      date: new Date()
     };
   members.insert(members).then(insertedMessage => {
         res.json(insertedMessage);
   });
 }
else {
  next(result.error);
   }
});

module.exports = router;

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вы также можете запускать функцию карты только при наличии сеансов или участников.Для этого вы можете сделать ниже проверить как:

{this.state.Sessions && this.state.Sessions.map(UsersSession ....... rest of the logic}
0 голосов
/ 19 февраля 2019

Скорее всего, в вашем состоянии нет массивов Sessions или members до завершения сетевого запроса.Вы можете добавить значения по умолчанию для пустых массивов, чтобы обойти это.

class App extends React.Component {
  state = {
    Sessions: [],
    members: []
  };

  // ...
}
...