2015-11-07 3 views
1

Im, использующий Meteor + React и« this.props.thing.source »- это строка для mongodb _id.Метеор + реагировать «Некопать TypeError: Невозможно прочитать данные свойства« неопределенного »

Функция «findOne()» является одной из функций Метеор. Как вы можете видеть, он отлично работает, когда я передаю строку самого идентификатора, но я получаю неопределенную ошибку при передаче в переменной, хотя эта переменная отображает эту же строку.

В этом коде:

Thing = React.createClass({ 
    propTypes: { 
    thing: React.PropTypes.object.isRequired 
    }, 
    render() { 
    return (
     <ul> 
     <li>Display: {Things.findOne(this.props.thing.source).data}</li> 
     <li>Display: {Things.findOne("emq6M4WbJeRvkA6Q3").data}</li> 
     <li>Source: {this.props.thing.source}</li> 
     </ul> 
    ); 
    } 
}); 

Это не работает:

  • Дисплей: {Things.findOne (this.props.thing.source) .data}
  • Эта работа:

  • Дисплей: {Things.findOne ("emq6M4WbJeRvkA6Q3") данные.}
  • И это правильно делает "emq6M4WbJeRvkA6Q3":

  • Источник: {} this.props.thing.source
  • Индикатор ошибки я получаю:

    "Uncaught TypeError: не удается прочитать свойство 'данные' неопределенных"

    +0

    Вероятно потому, что 'this.props. thing.source' не равно этому хэш-коду, то есть 'findOne' возвращает' undefined', поэтому доступ к свойству 'data' вызывает ошибку. – royhowie

    +0

    просто понял, и это связано с тем, что вы не равны строке ... я узнал, что не все вещи имеют значение для .source, поэтому некоторые из них были не определены ... теперь я проверяю, есть ли строка сначала, а затем выполняет поиск. – markjspivey

    +0

    Вот что я имел в виду. Когда вы использовали строчную кодированную строку, 'findOne' возвратил объект с свойством' data'. Однако, когда вы использовали переменную, 'findOne' возвращал' undefined', следовательно, ошибку. – royhowie

    ответ

    1

    Вы получаете ошибку из-за того, что Things.findOne() возвращает undefined.

    Вы говорите, что вызов выше функций с this.props.thing.source не работает, что это неправильно, но так как вы не упоминая, как визуализация Вашего Thing компонента происходит ваш лучший выбор, чтобы найти ошибку пути вы передаете prop this.props.thing.source/то, что вы передаете своему компоненту.

    Я сделал быстрый пример копирования и вставки, которая иллюстрирует, а также сделал свой компонент работы в

    var Things = { 
        findOne: function (thingSource) { 
         if (thingSource) { 
          return { 
           data: 'It did work!' 
          }; 
         } 
         return undefined; 
        } 
    } 
    
    var Thing = React.createClass({ 
        propTypes: { 
         thing: React.PropTypes.object.isRequired 
        }, 
        render: function() { 
         return <div>Hello {Things.findOne(this.props.thing.source).data}</div>; 
        } 
    }); 
    
    React.render(<Hello thing={{source: true}} />, document.body); 
    

    рабочий пример JSFiddle с вашим точным компонентом может быть found here

    +0

    взглянул на это и обновил мои вопросы с некоторыми деталями. im, используя Meteor + React, так что «Вещи» - это коллекция Mongo, определенная Meteor, и «findOne()» - это предоставленная функция, а не одна, которую я создал. «this.props.thing.source» - это переменная, содержащая строку Mongo _id.он правильно отображает строку _id, но функция find не работает, когда я использую эту переменную, я получаю неопределенную ошибку для свойства данных. – markjspivey

    +0

    только что понял, и это связано со строкой ... я узнал, что не все Вещи имеют значение для .source, поэтому некоторые из них были не определены ... теперь я проверяю, есть ли первое значение строки , и только затем выполнение поиска. – markjspivey

    Смежные вопросы