2016-06-30 14 views
0

React(Redux付き)とParseを使って簡単なTodoアプリケーションを構築しています。私はオブジェクトの非同期読み込みを理解することに重大な問題があります。Parse.com非同期読み込みエラーのReactjs?オブジェクトにアクセスできない

ケース#1:

var todos = this.props.todos; 
    console.log(todos) // I see [{TodoClass} {TodoClass}] 
    console.log(todos[0]) // I see {id: "xyz123", content: "hello world"} 

ケース#2:

var todos = this.props.todos; 
    console.log(todos) // I see [] 
    console.log(todos[0]) // undefined 
    console.log(todos[0].id) // error; can't access id 

強調 - サーバ上のドスは人口です。私は空の配列にアクセスしようとしていませんが、アクセス.idを追加することで、todos配列が空になります。

私は立ち往生しています。私は "id"にアクセスしようとするとロードの変化のシーケンスが疑わしいですが、それを修正する方法はわかりません。修正を提案してください。どんな助けでも大歓迎です。

TodoClass.js:

function TodoClass(id, content) { 
    this.id = id; 
    this.content = content; 
} 
export default TodoClass 

解析クエリ()約束を見つける使用することにより、私は解析DBの各「行」、およびストアへのデータのための私のTodoClassインスタンス内のデータとストアをマップ。私はReduxビューアが正しく更新されるのを見る。

これは、私はそれをロードする場所TodoList.jsxです:最初のスニップはエラーではなく、二番目があるん

var TodoList = React.createClass({  
    render: function() { 
     var todos = this.props.todos; <-- Array of TodoClass instances 
     var renderData =() => { 
      console.log(todos) 
      console.log(todos[0]) 
      //console.log(todos[0].id) <-- Gives me issues. 
      var elements = []; 
      for (var i = 1; i< 5; i++) { 
       elements.push(<BrowseItem key={i} todo={todos[i]}/>) 
      };  
      return elements; 
     }; 
     return (
      <div > {renderData()} </div> 
     ); 
    } 
});   
export default connect((state) => {return state})(TodoList); 

答えて

1

理由、後者は、あなたが.idにアクセスしようとしているエラーが発生しますon undefined - これは意味があります。 ToDo項目がない場合は、最初の項目のIDを取得できません。項目はそこにありません。

render: function() { 
    var todos = this.props.todos; 
    if (todos.length === 0) { 
    return <div>No todos.</div>; 
    } 
    console.log(...); 
    ... 
    return <div>{renderData()}</div> 
} 
+0

基本的に、私は最後の行を「コメントアウト」場合 'コンソール:

あなたrender機能は、おそらく「ロード」/「いいえドス」ここにプレースホルダを任意のトドスがあるかどうかを確認し、返す必要があります。 log(todos [0] .id) 'これで、ケース1で見たものすべてが同じものとして見えます。 dbデータの何も変更されていないので、私は3つの解析要素を持っています。私は空の配列にアクセスしようとしていません。何らかの形で '.id'がアクセスしようとすると、配列は空になります。 'console.log()'の3行目は最初と2番目の行に影響します。 – jbro

+1

コンポーネントを初めてレンダリングするときに非同期にロードすると、空の配列が表示され、ロードされたtodosでのみ更新されることに注意してください。それは何とか "空"にならず、最初の実行では常に空です。 2番目のスニペットはエラーをスローし、配列が移入されると更新されません。 –

+0

ご清聴ありがとうございます。はい、それは私が解決しようとしている問題です。これは非同期に実行されています。この問題を回避する方法が分かっている場合は、お勧めします。 – jbro

関連する問題