Reactを使用する非常に単純なMeteorアプリでは、Meteor.users
コレクションの登録ユーザーをすべて一覧表示するテーブルがあります。Meteor React Error:未定義のプロパティ '0'を読み取ることができません
ただし、各ユーザーの電子メールアドレスを表示しようとすると、HTMLページに電子メールアドレスが正しく表示されますが、ブラウザのJSコンソールで次のエラーが発生します。
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);
おそらく、Userコンポーネントのrenderメソッドは、電子メールが解決される前と、解決された後に2回呼び出されることがあります。ユーザコンポーネントのレンダリングメソッドにconsole.log(this.props)を入れてみてください。 – Swapnil
これまでのところはどうですか? this.props.userのログ値は?ほとんどの場合、電子メール属性がクライアントに送信されていない可能性があります。 – collision
@Swapnil 'console.log'を提案として追加すると' Object {users:Array [0]} 'の後に' Object {users:Array [1]} 'が続きます – Nyxynyx