2015-11-07 96 views
1

使用Meteor + React和」this.props.thing.source「是mongodb _id的字符串。meteor + react「Uncaught TypeError:無法讀取未定義的屬性'數據'

「findOne()」函數是Meteor的函數之一。正如你所看到的,當我傳遞ID本身的字符串時它工作正常,但是當傳遞變量時我得到一個未定義的錯誤,即使該變量渲染出相同的字符串。

在此代碼:

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)。數據}
  • 此作品:

  • 顯示:{Things.findOne( 「emq6M4WbJeRvkA6Q3」)數據。}
  • 而這個正確呈現 「emq6M4WbJeRvkA6Q3」:

  • 來源:{this.props.thing.source}
  • 的錯誤我得到:

    「遺漏的類型錯誤:未定義無法讀取屬性‘數據’」

    +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的渲染髮生你最好的選擇,找到錯誤是你傳遞的方式道具this.props.thing.source /你傳遞給你的組件。

    我做了說明快速複製粘貼例子,也讓您的組件工作在的jsfiddle

    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); 
    

    與您的具體組件工作示例可以found here

    +0

    看了一下,並用一些細節更新了我的問題。即時通訊使用Meteor + React,所以「Things」是一個Meteor定義的Mongo集合,「findOne()」是提供的函數,不是我創建的函數。 「this.props.thing.source」是一個包含Mongo _id字符串的變量。它正確地呈現一個_id的字符串,但find函數在我使用這個變量時不起作用,我得到了數據屬性的未定義錯誤。 – markjspivey

    +0

    只是想出來了,它與字符串有關......我發現並不是所有的東西都有.source的值,所以在某些時候它是未定義的......現在我要檢查是否有字符串值,然後才執行查找。 – markjspivey

    相關問題