meteor反应错误:无法读取未定义的属性“0”
在使用React的非常简单的Meteor应用程序中,有一张表列出了Meteor.users
集合中的所有注册用户。
但是,当试图显示每个用户的电子邮件地址时,浏览器JS控制台正在抛出以下错误,尽pipe电子邮件地址在HTML页面上正确呈现。
Exception from Tracker recompute function: TypeError: Cannot read property '0' of undefined at Users.render (User.jsx:8)
为什么这个错误发生?
/imports/ui/User.jsx
import React, { Component } from 'react'; export default class Users extends Component { render() { return ( <tr> <td>{ this.props.user._id}</td> <td>{ this.props.user.emails[0].address }</td> // this is line 8 </tr> ) } }
/imports/ui/App.jsx
import React, { Component, PropTypes } from 'react'; import { createContainer } from 'meteor/react-meteor-data'; import User from './User'; export class App extends Component { renderUsers() { return this.props.users.map((user) => ( <User key={user._id} user={user} /> )); } render() { return ( <div> <h1>Users</h1> <table> <tbody> <tr> <td>ID</td> <td>Email</td> </tr> { this.renderUsers() } </tbody> </table> </div> ) } } App.propTypes = { users: PropTypes.array.isRequired } export default createContainer(() => { return { users: Meteor.users.find().fetch() } }, App);
那么它似乎this.props.user.emails
是未定义的。 你确定这是你正在寻找的正确的钥匙吗?
方法来解决这个问题。
拉入图书馆lodash(它会改变你的生活)
import _ from 'lodash'; .... <td>{_.get(this.props, 'users.emails[0].address', 'UNKNOWN ADDRESS')}</td>
如果你不想拉东西像lodash然后检查,看看是否有价值..
var address = 'UNKNOWN ADDRESS'; if(this.props.users.emails && this.props.users.emails.length > 0) { address = this.props.users.emails[0].address; }