2015-11-07 99 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

    相关问题